加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如何使用cmake在vcproj文件中设置属性?

发布时间:2020-12-14 02:03:27 所属栏目:Windows 来源:网络整理
导读:Visual Studio的vcproj文件包含影响构建的各种设置或属性.例如,我试图转换为cmake的项目使用的一些项目是 StringPooling="true"RuntimeLibrary="2"TreatWChar_tAsBuiltInType="true"WarningLevel="3"Detect64BitPortabilityProblems="false" 当然还有很多其
Visual Studio的vcproj文件包含影响构建的各种设置或属性.例如,我试图转换为cmake的项目使用的一些项目是

StringPooling="true"
RuntimeLibrary="2"
TreatWChar_tAsBuiltInType="true"
WarningLevel="3"
Detect64BitPortabilityProblems="false"

当然还有很多其他的可以设置.问题是如何使用cmake生成项目时设置它们.有没有人知道如何在使用cmake时设置这些属性,而不是在事后编辑vcproj文件?我找不到任何解释如何通过cmake设置这些属性的东西.我知道如何设置的唯一一个是cmake专门为其提供跨平台的东西(例如PreprocessorDefinitions或AdditionalIncludeDirectories).但我需要能够设置特定于Visual Studio的那些.

解决方法

对于您列出的标志,您需要将以下内容添加到CMakeLists.txt:

if(MSVC)
  # StringPooling: true == /GF  false == /GF-
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GF")

  # RuntimeLibrary
  # 0 (MultiThreaded) == /MT
  # 1 (MultiThreadedDebug) == /MTd
  # 2 (MultiThreadedDLL) == /MD
  # 3 (MultiThreadedDebugDLL) == /MDd
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")

  # TreatWChar_tAsBuiltInType: true == /Zc:wchar_t  false == /Zc:wchar_t-
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:wchar_t")

  # WarningLevel: /W<level 0 to 4> or /Wall
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")

  # Detect64BitPortabilityProblems: /Wp64 - Deprecated since VC++ 2010 
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wp64")
endif()

如果需要,您可以在一个电话中对这些进行分组:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GF /Zc:wchar_t /W3 /Wp64")

如果您只需要向单个目标添加标志(例如,MyTestExe),您可以执行以下操作:

set_target_properties(MyTestExe PROPERTIES COMPILE_FLAGS "/GF- /W2")

通过此特定于目标的方法设置的选项将覆盖常规CMAKE_CXX_FLAGS变量中的任何冲突的选项.

有关这些命令的更多信息:

cmake –help-variable “CMAKE_<LANG>_FLAGS_DEBUG”
cmake –help-command set_target_properties
cmake –help-property COMPILE_FLAGS

Visual Studio编译器选项列于here.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读