如何关联CMake源码目录到Visual Studio项目 解决新增文件存储路径问题
解决VS2019 + CMake生成C#项目时新项默认存储路径问题
VS添加新项的默认存储路径由.csproj文件的内置属性控制,CMake默认生成的配置会把该路径指向构建目录,可通过修改CMake配置实现新项直接存入指定源码目录,无需手动拷贝:
方案1:CMake 3.20及以上版本(官方原生支持)
- 在项目根
CMakeLists.txt中先定义你的源码根目录路径,示例:# 替换为实际的源码目录路径 set(PROJECT_SRC_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/src) - 在定义C#目标(
add_executable/add_library)之前添加以下配置:# 设置新项默认存储路径为源码目录 set(CMAKE_DOTNET_TARGET_DIR "${PROJECT_SRC_ROOT}") # 保留构建产物输出到原构建目录,避免源码目录污染 set(CMAKE_CSharp_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
方案2:CMake 3.20以下版本兼容配置
如果使用的CMake版本较低,可通过给C#目标设置VS全局属性实现:
- 在定义C#目标之后添加以下配置,将
YOUR_CSHARP_TARGET_NAME替换为实际的目标名:set_target_properties(YOUR_CSHARP_TARGET_NAME PROPERTIES VS_GLOBAL_DefaultItemPath "${PROJECT_SRC_ROOT}" VS_GLOBAL_BaseIntermediateOutputPath "${CMAKE_CURRENT_BINARY_DIR}/obj/" VS_GLOBAL_BaseOutputPath "${CMAKE_CURRENT_BINARY_DIR}/bin/" )
注意事项
- 不要手动修改生成的.csproj文件,CMake每次重新生成构建配置时会覆盖所有手动修改的内容,所有调整都要在CMakeLists.txt中完成
- 新项添加完成后,仍然需要把新增的文件路径添加到CMakeLists.txt的目标源文件列表中,下次重新生成CMake缓存时会自动关联到项目
- WPF窗口、用户控件这类包含xaml和后置代码的多文件组件,CMake会自动识别文件关联关系,无需额外配置
内容的提问来源于stack exchange,提问作者Ben Rowland
相关产品推荐
相关产品推荐

