2013-11-27 47 views
6

這個問題或多或少是這個問題的一個熱身:是否可以將文件添加到Visual Studio中的CMake生成的解決方案文件夾中?

是否可以使用CMake的解決方案:

how to get cmake to add files to msvcs solution tree

所以我想休息稍微不同的它從來沒有得到一個有效的答案那些在cmake 2.8.3中直接添加文件到vs解決方案的文件夾?我想做VS-> Solution-> Add-> Existing Item的cmake等價物。所以我的文件將出現在屬於解決方案的文件夾中,而不是項目。

我發現的例子是如何解決文件夾可用於集羣目標到文件夾中有這樣的代碼:

set_property(GLOBAL PROPERTY USE_FOLDERS ON) 
set_property(TARGET ${TARGET_NAME} PROPERTY FOLDER "Test") 

所以我可以添加一個文件,而不是一個目標文件夾?

回答

6

這可能是不可能的。

CMake將其資產組織爲項目目標。該項目與Visual Studio的解決方案文件相對應,而每個目標將在相應的解決方案中生成Visual Studio項目。

現在的問題是,CMake不允許向CMake項目添加文件。事實上,一個CMake項目只不過是一組目標,幾乎沒有定製選項。因此,您提到的USE_FOLDERS選項只能用於在解決方案中對VS項目進行分組,但不能用於單個文件。

最接近你問的可能是添加一個custom target來保存你的文件。但是,這仍然會在解決方案中生成VS項目(其中還包含一系列其他內容),而不是普通文件夾。

+0

謝謝你的快速回答。我會爲你投票,但我是一個聲譽低下的人。然後將如cmake宏這樣的全局文件添加到項目/解決方案中的常見方法是什麼? – Knitschi

+0

沒有最好的方法來做到這一點。 CMake本身傾向於將與目標相關的所有文件放入該目標的VS項目中:例如,每個VS項目總是包含用於創建CMakeLists.txt的CMakeLists.txt,即使導致CMakeLists.txt出現多次解決方案。所以如果你選擇了一個至少一致的類似方法。根據文件的性質和個人工作流程,組織文件的不同形式可能更有意義。例如,我個人從不在VS編輯CMake文件,所以我根本不包含它們。 – ComicSansMS

+0

我曾經這樣做過,但我最近安裝了VS的cmake語法高亮插件,現在我編輯了VS中的文件。我想我會使用「在所有目標中包含全局文件」的方法,在目標中包含文件的額外文件夾。 – Knitschi

1

如果我理解正確的問題,我想我知道如何做到這一點:

set(FILES_TO_ADD 
    file1 
    file2 
    file3) 

source_group("Group Name" FILES ${FILES_TO_ADD}) 

source_group命令創建的Visual Studio項目內的文件夾。

+0

不,我想在Visual Studio sollution級別創建一個文件夾。正如你所說,你的建議會在Visual Studio項目下創建一個文件夾。我想爲不屬於任何目標的文件創建一個文件夾,例如包含CMake函數或全局宏等的文件......在VS GUI中,您可以添加項目到sollution,並創建一個名爲「Soultion」的文件夾項目」。這是我想用CMake實現的,但是我失敗了 – Knitschi

0

這個答案只是在接受的答案中增加了一個由ComicSansMS提出的「自定義目標」解決方案的例子。這是我目前用來添加我的全局文件。

set(SOLUTION_FILES 
    ${CMAKE_SOURCE_DIR}/CMakeLists.txt    # root CMakeLists file 
    ${CMAKE_SOURCE_DIR}/cmake/macros.cmake   # cmake functions 
    ${CMAKE_SOURCE_DIR}/CMakeInCodeDefinitions.h.in # imported cmake variables 
    # etc... 
) 

add_custom_target(GlobalFiles SOURCES ${SOLUTION_FILES}) 
相關問題