【问题标题】:set clr support to true with cmake使用 cmake 将 clr 支持设置为 true
【发布时间】:2016-10-19 09:01:24
【问题描述】:

我正在尝试使用 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")  

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

-swetha

【问题讨论】:

  • 编译器调用中添加了什么?可能是,您不需要在标志前添加/
  • 目前我不知道它是否有帮助,但目前已将 VS 托管代码项目支持添加到 CMake 中,以便在下一个修订版中发布(CMake > 3.7.0,请参阅 @987654321 @)

标签: cmake clr managed-c++


【解决方案1】:

这在 Visual Studio 2017 上对我有用:

set_target_properties(${PROJECT_NAME} PROPERTIES COMMON_LANGUAGE_RUNTIME "")

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 也许你应该命名/链接你的答案的来源。如果我理解正确,您发布的内容是 Benjamin Ballet 在 CMake 邮件列表中提出的 an answer to your question
    • FWIW,我的 C/C++ 调试标志同时填充了 /RTC1-RTC1。要删除它们,我使用了以下内容:string(REGEX REPLACE "[/|-]RTC[^ ]*" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
    • 根据 CMake 源代码,设置 PROPERTIES COMMON_LANGUAGE_RUNTIME 唯一要做的就是设置 /clr 编译选项。似乎奇怪的不完整。所以你应该能够用set_target_properties(${project_name} PROPERTIES COMMON_LANGUAGE_RUNTIME "" 替换target_compile_options(${project_name} PRIVATE /clr) 并摆脱警告。
    猜你喜欢
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多