2017-07-03 68 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默认生成绝对路径。

参考