使用cmake将clr支持设置为true 我尝试用cGube生成一个托管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")

使用cmake将clr支持设置为true 我尝试用cGube生成一个托管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"),cmake,clr,managed-c++,Cmake,Clr,Managed C++,它没有将clrsupport设置为true。我们如何执行它 -swetha我在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 ${

它没有将clrsupport设置为true。我们如何执行它


-swetha

我在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}")

我在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}")

在Visual Studio 2017上,这对我来说是个诀窍:

set_target_properties(${PROJECT_NAME} PROPERTIES COMMON_LANGUAGE_RUNTIME "")

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

在Visual Studio 2017上,这为我提供了窍门:

set_target_properties(${PROJECT_NAME} PROPERTIES COMMON_LANGUAGE_RUNTIME "")

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

编译器调用中添加了什么?可能您不需要在您的标志前面添加
/
。我不知道这是否有帮助,但VS托管代码项目支持目前已添加到CMake中,将在下一版本(CMake>3.7.0,请参阅)中发布。编译器调用中添加了什么?可能您不需要在您的标志前面添加
/
。我不知道这是否有帮助,但VS托管代码项目支持目前已添加到CMake中,将在下一版本中发布(CMake>3.7.0,请参阅),也许您应该命名/链接答案的来源。如果我理解正确,您发布的内容是由Benjamin Ballet在CMake邮件列表中提出的.FWIW,我的C/C++调试标志同时填充了
/RTC1
-RTC1
。为了删除它们,我使用了以下命令:
string(REGEX替换“[/|-]RTC[^]*”“CMAKE\u CXX\u FLAGS\u DEBUG${CMAKE\u CXX\u FLAGS\u DEBUG})
也许你应该命名/链接你答案的来源。如果我理解正确,您发布的内容是由Benjamin Ballet在CMake邮件列表中提出的.FWIW,我的C/C++调试标志同时填充了
/RTC1
-RTC1
。为了删除它们,我使用了以下命令:
string(REGEX替换“[/|-]RTC[^]*“”“CMAKE\u CXX\u FLAGS\u DEBUG${CMAKE\u CXX\u FLAGS\u DEBUG})