Укажите, как cmake создает проект Visual Studio - PullRequest
8 голосов
/ 29 ноября 2011

Я настраиваю cmake для своего проекта и настроил для него тестовый проект. Когда он генерирует мой проект visual studio 2010, я хочу сделать его тем же проектом, который был у меня ранее.

  • создает проект ALL_BUILD и ZERO_CHECK, который мне не нужен.
  • помещает файлы .h в папку «Внешние зависимости». Мне нужна папка «Включить файлы», в которую входят все файлы .h.
  • Я также хочу сгруппировать некоторые файлы под разными фильтрами. Как и в моей основной библиотеке, я хочу сгруппировать все файлы, относящиеся к математике, в одной папке и все файлы, связанные с управлением событиями, в другой.
  • В файловой системе он помещает файлы проекта в / Lib / src. Вероятно, потому что я организовал это в папке с кодом, но я не хочу этого для файлов проекта.
  • Я хочу настроить другую конфигурацию, поэтому у меня есть DebugOpenGL, DebugDirectX, ReleaseOpenGL, ReleaseDirectX, а затем устанавливается флаг USE_OPENGL или USE_DIRECTX для двух типов конфигураций.

Как я могу исключить некоторые файлы при сборке на windows и другие при сборке на linux? Как у меня есть WindowWin.cpp и WindowLinux.cpp.


Я попробовал то, что вы предложили, но не могу заставить его работать:

#LibProject/src

FILE(GLOB test0_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test.h)
source_group(include0 FILES ${test0_headers})
FILE(GLOB test0_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp)
source_group(source0 FILES ${test0_source})

FILE(GLOB test1_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test1.h)
source_group(include1 FILES ${test1_headers})
FILE(GLOB test1_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test1.cpp)
source_group(source1 FILES ${test1_source})

include_directories(${test0_headers} ${test1_headers})

add_library(LibProject  ${test0_headers} ${test1_headers} ${test0_source} ${test
1_source})

Теперь я вроде как работает ... только для того, чтобы я хотел иметь подпапки для заголовков и исходных файлов внутри исходной группы.

set(test_source0 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp)
source_group(TEST FILES ${test_source0})

set(test_source1 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp)
source_group(TEST2 FILES ${test_source1})

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc)
add_library(LibProject  ${test_source0} ${test_source1})

Вот мое решение :) 1026 *

set(test_header
${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h)
set(test_source
${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp)

source_group(TEST\\Headers FILES ${test_header})
source_group(TEST\\Source FILES ${test_source})

set(test2_header
${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h)
set(test2_source
${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp)
source_group(TEST2\\Headers FILES ${test2_header})
source_group(TEST2\\Source FILES ${test2_source})

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc)

add_library(LibProject
${test_header}
${test_source}
${test2_header}
${test2_source})

Ответы [ 2 ]

7 голосов
/ 29 ноября 2011

Для группировки файлов в папку в Visual Studio вы можете использовать:

# Include files
FILE(GLOB all_headers "include/*.h*")
source_group("include" FILES ${all_headers})

# Source files
FILE(GLOB all_srcs "src/*.cpp")
source_group("source" FILES ${all_srcs})

При этом все ваши файлы .h, расположенные в папке include, будут отображаться в папке с именем include в Visual Studio. То же самое для ваших файлов cpp. Вы можете использовать эту технику, чтобы создать свою собственную структуру в CMake, если вы этого хотите.

Для целей ALL_BUILD и ZERO_CHECK прочитайте этот ответ . Чтобы отключить генерацию ZERO_CHECK, используйте set(CMAKE_SUPPRESS_REGENERATION true).

Чтобы выбрать между OpenGL и DirectX и настроить соответствующие папки, вы можете использовать ту же технику, что и выше, но поместить их в

if(${USE_OPENGL})
    FILE(GLOB ....)
endif()

Я думаю, вы поняли.

4 голосов
/ 29 ноября 2011

Я отвечу на те, которые знаю:

ALL_BUILD и ZERO_CHECK используются для синхронизации ваших проектов с изменениями в CMakeFiles.Я не думаю, что есть способ избавиться от них.

Чтобы получить .h файлы там, где вы хотите их, вам нужно включить их в качестве источника.Я использую что-то вроде этого:

file(GLOB LocalProjectIncludes "${yourheaderdirectory}/*.h")

Затем я добавляю $ {LocalProjectInclude} к исходным файлам проекта.CMake выяснит, что они заголовки;он не будет пытаться их построить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...