使用 cmake 将 clr 支持设置为 true

swe*_*tha 2 clr managed-c++ cmake

我正在尝试使用 cmake 生成托管 C++ 代码。下面是我添加的脚本

 SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/clr") 
 STRING(REPLACE "/EHsc" "/EHa" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
 STRING(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /clr")  
Run Code Online (Sandbox Code Playgroud)

它没有将 clrsupport 设置为 true。我们如何做 cmake。

-swetha

swe*_*tha 6

我在我的 cmakelist 中设置了以下属性,它现在正在工作

target_compile_options(${project_name} PRIVATE /clr)
target_compile_options(${project_name} PRIVATE /fp:precise) # /fp:strict is          
incompatible with /clr

set_property(TARGET ${project_name} PROPERTY VS_GLOBAL_ROOTNAMESPACE ${project_name})

set_property(TARGET ${project_name} PROPERTY VS_GLOBAL_KEYWORD "ManagedCProj")

set_property(TARGET ${project_name} PROPERTY VS_GLOBAL_CLRSupport "true")

set_property(TARGET ${project_name} PROPERTY VS_DOTNET_TARGET_FRAMEWORK_VERSION "v4.0")

set_property(TARGET ${project_name} PROPERTY VS_DOTNET_REFERENCES "System" "System.Data" "System.Drawing" "System.Windows.Forms" "System.Xml")

# Note: Modification of compiler flags is required for CLR compatibility now that we are using .resx files.
string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
Run Code Online (Sandbox Code Playgroud)

  • 也许你应该命名/链接你的答案的来源。如果我理解正确的话,您发布的内容是 Benjamin Ballet 在 CMake 邮件列表上提出的,作为 [您问题的答案](http://www.mail-archive.com/cmake@cmake.org/msg55716.html )。 (2认同)

Eug*_*sky 5

在 Visual Studio 2017 上,这对我有用:

set_target_properties(${PROJECT_NAME} PROPERTIES COMMON_LANGUAGE_RUNTIME "")
Run Code Online (Sandbox Code Playgroud)

请注意,Visual Studio 2017 已删除值“pure”和“safe”,上述空字符串""将为您提供“混合”(本机/托管)dll。