使用CMake

时间:2017-07-03 07:47:08

标签: visual-studio cmake vcxproj

我正在尝试使用CMake将整个目录结构添加到我的Visual Studio项目中。我知道在VS中是可能的,因为我已经成功通过手动复制项目的同一目录中的结构的根文件夹并选择“包含在项目中”。但是,我不确定CMake是否可行。

我的.vcxproj在此手动操作后包含此ItemGroup:

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

如您所见,我刚刚添加了两个文件夹和两个txt文件。这产生了我想要实现的结果。

有关如何使用CMake生成此内容的任何想法?

1 个答案:

答案 0 :(得分:0)

CMake旨在隐藏用户的构建/操作系统环境的详细信息。这需要跨平台/环境进行一些概括。因此,很难获得手动制作.vcxproj项目的精确副本。

您可以将任何文件添加到CMake目标 - 明确包括非源文件 - 然后由CMake添加到生成的IDE项目。

如果我理解您的具体案例,问题是在Text源文件列表中获取None而不是ItemGroup工具名称。

从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默认只生成绝对路径。

<强>参考