我正在尝试使用 cmake 设置 C++/CLI 项目。我在 Visual Studio 2010 上已经成功地做到了这一点,但我现在正在使用需要 Visual Studio 2008 的旧解决方案。在 Visual Studio 2010 中,像这样设置我的 cmake 就足够了:
set_target_properties(${PROJECT_NAME} PROPERTIES VS_DOTNET_REFERENCES "${CMAKE_CURRENT_SOURCE_DIR}/../OrionMaster/3rdParty/GMap.NET.Core.dll;System;System.Core;System.Data;System.Drawing;System.Xml;WindowsBase")
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/clr /EHa")
set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "d")
if(CMAKE_CXX_FLAGS_DEBUG MATCHES "/RTC1")
string(REPLACE "/RTC1" " " CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
endif()
if(CMAKE_CXX_FLAGS MATCHES "/EHsc")
string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
endif()
然后,当我在 Visual Studio 2010 下检查该项目时,我可以看到所有引用并且“公共(public)语言运行时支持”已打开。当我在 Visual Studio 2008 中尝试时,我没有看到任何引用,并且项目设置为“无公共(public)语言运行时支持”如果我再查看编译器选项,我可以看到/clr 正在传递给编译器.但是我仍然得到很多编译器错误,可能是因为它缺少引用。有谁知道正确设置它的方法?
最佳答案
对 VS_DOTNET_REFERENCES 属性的唯一“真实”源代码引用位于 CMake 源文件 Source/cmVisualStudio10TargetGenerator.cxx 中。
这在实践中意味着什么:VS_DOTNET_REFERENCES 仅针对 Visual Studio 2010 的 CMake 生成器和任何继承自它的生成器实现。 (现在存在于 VS 2012 和 2013 的最新 CMake 版本中......)
修改 CMake 源代码以支持 Visual Studio 早期版本的此属性可能是可能的,但目前尚未完成。
关于.net - C++/CLI 和 CMake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12503229/