2011-11-29 78 views
8

我正在爲我的項目設置cmake,並且已經爲它建立了一個測試項目。當它生成我的visual studio 2010項目時,我想將它作爲我之前的項目。指定cmake如何創建視覺工作室項目

  • 它創建了一個我不想要的ALL_BUILD和ZERO_CHECK項目。
  • 它將.h文件放到External Dependencies文件夾中。我想要一個包含所有.h文件的Include Files文件夾。
  • 我也想在不同的過濾器下分組一些文件。就像在我的核心lib中,我想將與數學相關的所有文件歸檔到一個文件夾中,並將所有與事件管理相關的文件歸入另一個文件夾。
  • 在文件系統上,它將項目文件放在/ Lib/src中。可能是因爲我把它組織在代碼文件夾中,但我不希望爲項目文件。
  • 我想設置不同的配置,所以我有DebugOpenGL,DebugDirectX,ReleaseOpenGL,ReleaseDirectX,然後爲這兩種配置設置一個標誌USE_OPENGL或USE_DIRECTX。

當我在linux上構建時,如何在Windows和其他平臺上構建時排除某些文件?就像我有WindowWin.cpp和WindowLinux.cpp。


我試過你sugested什麼,但不能得到它的工作:

#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}) 

繼承人我的解決方案:)

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}) 
+0

看http://stackoverflow.com/questions/27175754/what-are-all-build-and-zero-check-and-do-i-need-them看什麼ZERO_CHECK和ALL_BUILD是。 – sashoalm

回答

7

要組文件到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文件中出現了一個名爲文件夾中包括在Visual Studio 。你的cpp文件也一樣。如果這是你想要的,你可以使用這種技術在CMake中創建自己的結構。

出於ALL_BUILD和ZERO_CHECK的目的,請閱讀this answer。要禁用生成ZERO_CHECK,請使用set(CMAKE_SUPPRESS_REGENERATION true)

要OpenGL和DirectX相應的文件夾之間,並設置選擇,你可以使用上面所使用的相同的技術,但把它們放在裏面

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

我覺得你的想法。

+2

儘管使用GLOB可能不是最好的想法,因爲如果缺少對項目至關重要的文件,它不會給你一個錯誤。如果您手動列出所有文件(我知道大量輸入)如果CMake無法找到列出的文件,它會投訴。 – LiMuBei

+0

擺脫ZERO_CHECK你可以通過-DCMAKE_SUPPRESS_REGENERATION = 0選項的CMake命令行。 – davidnr

4

我會回答,我知道的那些:

的ALL_BUILD和ZERO_CHECK用於保持您的項目在同步同向變化CMakeFiles。我不認爲有辦法擺脫這些。

要將.h文件放到需要的位置,您需要將它們作爲源的一部分。我使用這樣的東西:

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

然後我追加$ {LocalProjectIncludes}到項目的源文件。 CMake會發現他們是頭文件;它不會嘗試構建它們。