1

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

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

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

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

关于如何用 CMake 生成它的任何想法?

4

1 回答 1

1

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

参考

于 2017-07-03T19:36:16.390 回答