[CMake] CMake 3.2.2 generates too many virtual folders for Codeblocks project

c roman t.err.a at yandex.ru
Mon Jun 1 08:03:57 EDT 2015


Hi,

i have a project in the path D:\folder1\folder2\prj1, all sources and CMakeLists.txt are in this folder 'prj1'.
CMake generates for the Codeblocks project file in which the source files are located in a virtual folders with the path not corresponding to the root folder of the project 'prj1'.
For Codelite CMake generates normal path corresponding to the root folder of the project.

So generated project tree in Codeblocks:

___CMakeFiles
|    |__[..]
|    |    |__[..]
|    |         |__[programms]
|    |               |__[cmake]
|    |                       |__[share]
|    |                             |__cmake-3.2
|    |                                   |__[Modules]
|    |                                       |__[Compiler]
|    |                                       |    |__GNU-C.cmake
|    |                                       |     |__GNU-CXX.cmake
|    |                                       |    |__GNU.cmake
|    |                                       |     |__GNU.cmake
|    |                                       |
|    |                                       |__[Platform]
|    |                                       |   |__Windows-GNU-C-ABI.cmake
|    |                                       |   |__ ..... cmake files
|    |                                      |
|    |                                       |__ ..... cmake files
|    |__CMakeList.txt
|
|__[Sources]
|    |__[folder1]
|          |__[folder2]
|              |__[prj1]
|                    |__ .... '.cpp' files
|
|__[Headers]
|    |__[folder1]
|          |__[folder2]
|              |__[prj1]
|                    |__ .... '.h' files
|
|__[Resources]
    |__[folder1]
          |__[folder2]
                |__[prj1]
                      |__ resource.rc

Generated project tree in Codelite:

|__[include]
|    |_ .... '.h' files
|__[src]
    |__ .... '.cpp' files


Why such a difference?
Is it possible to get CMake does not create extra virtual folders for Codeblocks project?

CMakeLists.txt:
# Сборочный файл для программы my_program

# Минимальная версия CMake, младше нельзя.
cmake_minimum_required( VERSION 2.8.4 )

# Устанавливаем значение переменной BIN
set( BIN hisview_dev )
# Имя проекта у нас соответствует имени программы.
project( ${BIN} )

# Добавляем свои опции компиляции
set ( CMAKE_CXX_FLAGS "-m32 -std=gnu++11" )

set(CMAKE_INSTALL_PREFIX $ENV{mybin})
message (STATUS "CMAKE_INSTALL_PREFIX:" ${CMAKE_INSTALL_PREFIX})

# указываем куда складывается результат компиляции
set (EXECUTABLE_OUTPUT_PATH $ENV{mybin})

# пока не разбирался для чего это ???
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $ENV{PROJECTS_OUTPUT})

# Устанавливаем корневой путь к папке с исходниками программы.
set( SOURCE_ROOT ${PROJECT_SOURCE_DIR} )
message (STATUS "PROJECT_SOURCE_DIR:" ${PROJECT_SOURCE_DIR})

set(DEBEA_ROOT $ENV{DEBEA})
file(TO_CMAKE_PATH ${DEBEA_ROOT} DEBEA_ROOT)
message (STATUS "DEBEA_ROOT" ${DEBEA_ROOT})
#STRING(REGEX REPLACE '\\' '/' TEST_VAR ${DEBEA_ROOT} )
set(DEBEA_INCLUDE ${DEBEA_ROOT}/dba)
message (STATUS "DEBEA_INCLUDE:" ${DEBEA_INCLUDE})
set(DEBEA_LIB ${DEBEA_ROOT}/lib/gcc_static_mingw-w64-32)

# По умолчанию имена файлов с исходниками нужно перечислять явно.
# Функция aux_source_directory (рекурсивно) просматривает исходники
#(начиная от корневого пути, указанного выше) и собирает имена всех
# файлов, имеющих классическое разрешение, такие как .cpp, .cxx и т.п.
# В итоге формируется список всех найденных файлов и сохраняется в переменной
# SOURCES
aux_source_directory( ${SOURCE_ROOT} SOURCES )
message (STATUS "SOURCES:" ${SOURCES})

# Для Windows ОС включаем файлы ресурсов
#message (STATUS "SRC:" ${SRC})
if(WIN32)
  set(SRC ${SRC} ${SOURCE_ROOT}/resource.rc)
endif(WIN32)

# Включаем дополнительные файлы в проект
# MainFrameBase.fbp - проект wxFormBlocks
#set(SRC ${SRC} ${SOURCE_ROOT}/MainFrameBase.fbp ${SOURCE_ROOT}/wxsmith/MainFrameBase.wxs ${SOURCE_ROOT}/wx_pch.h)

# Создание группы файлов ???
#source_group ("Headers" FILES ${HEADERS})
#source_group ("Source Files" FILES ${SOURCES})

#Подключаем wxWidgets
find_package(wxWidgets COMPONENTS aui adv core base REQUIRED)
if(wxWidgets_FOUND)
    INCLUDE_DIRECTORIES(${wxWidgets_INCLUDE_DIRS})
    include(${wxWidgets_USE_FILE})
endif ()

include_directories(${DEBEA_ROOT})
link_directories(${DEBEA_LIB})

set (REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${wxWidgets_LIBRARIES})
message (STATUS lib: ${wxWidgets_LIBRARIES})
# Собираем исполняемый файл с именем my_program.
#add_executable( ${BIN} WIN32 ${SOURCES})
add_library(dba STATIC IMPORTED)
set_property(TARGET dba PROPERTY IMPORTED_LOCATION ${DEBEA_LIB}/libdba.a)
add_executable( ${BIN} WIN32 ${SOURCES} ${SRC})
# Компонуем собранную программу с необходимыми динамическими библиотеками.
#target_link_libraries(${BIN} ${wxWidgets_LIBRARIES})
target_link_libraries( ${BIN} ${REQUIRED_LIBRARIES} dba)


More information about the CMake mailing list