2017-07-03 30 views
0

我試圖使用CMake將整個目錄結構添加到我的Visual Studio項目中。我知道在VS中可能會有這種情況,因爲我已經成功地通過在項目的同一目錄中手動複製結構的根文件夾並選擇「包含在項目中」。但是,我不確定CMake可以實現。使用CMake在.vxcproj中生成一個自定義ItemGroup

我.vcxproj包含此的ItemGroup此手動操作後:

<ItemGroup> 
    <Text Include="asd\test.txt" /> 
    <Text Include="asd\asd2\test.txt" /> 
</ItemGroup> 

正如你看到的我只是增加了兩個文件夾和兩個txt文件。這產生了我試圖實現的結果。

有關如何使用CMake生成此任何想法?

+0

的可能的複製[如何設置使用cmake嵌套子目錄的Visual Studio過濾器](https://stackoverflow.com/questions/31422680/how -to-set-visual-studio-filters-for-nested-sub-directory-using-cmake) – Florian

+0

謝謝Florian,但它不是我所需要的:我不需要複製我的項目上的目錄結構作爲過濾器,我需要項目輸出目錄中的實際文件夾 – Oneiros

回答

0

CMake旨在隱藏來自用戶的構建/操作系統環境的細節。這需要跨平臺/環境進行一些泛化。因此很難獲得手動製作的.vcxproj項目的精確副本。

您可以將任何文件添加到CMake目標 - 明確包括非源文件 - 然後將由CMake添加到生成的IDE項目。

如果我正確理解您的具體情況,則問題是在ItemGroup源文件的列表中獲取Text而不是None工具名稱。

由於CMake版本3.7,您可以使用VS_TOOL_OVERRIDE源文件屬性覆蓋CMake的非源文件的默認值。

下面的小例子:

cmake_minimum_required(VERSION 3.7) 

project(HelloWorld) 

file(WRITE main.cpp [=[ 
#include <iostream> 

int main() 
{ 
    std::cout << "Hello World!" << std::endl; 
} 
]=]) 

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/asd/test.txt" "") 
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/asd/asd2/test.txt" "") 

add_executable(HelloWorld "main.cpp" "asd/test.txt" "asd/asd2/test.txt") 

set_source_files_properties(
    "asd/test.txt" 
    "asd/asd2/test.txt" 
    PROPERTIES VS_TOOL_OVERRIDE "Text" 
) 

是否給你的預期效果。 CMake默認生成絕對路徑。

參考