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

标签 windows visual-studio cmake

Visual Studio 的 vcproj 文件包含影响构建的各种设置或属性。例如,我试图转换为 cmake 的项目使用的一些是

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

当然还有很多其他可以设置的。问题是在使用cmake生成项目时如何设置它们。除了事后编辑 vcproj 文件之外,有谁知道在使用 cmake 时如何设置这些类型的属性?我找不到任何解释如何通过 cmake 设置这些属性的内容。我唯一知道如何设置的是 cmake 专门针对跨平台的东西(例如 PreprocessorDefinitionsAdditionalIncludeDirectories)。但我需要能够设置特定于 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 中的任何冲突选项变量。

有关这些命令的更多信息,请执行以下操作:

<a href="http://www.cmake.org/cmake/help/v2.8.10/cmake.html#variable%3aCMAKE_LANG_FLAGS_DEBUG" rel="noreferrer noopener nofollow">cmake --help-variable "CMAKE_<LANG>_FLAGS_DEBUG"</a>
<a href="http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command%3aset_target_properties" rel="noreferrer noopener nofollow">cmake --help-command set_target_properties</a>
<a href="http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt%3aCOMPILE_FLAGS" rel="noreferrer noopener nofollow">cmake --help-property COMPILE_FLAGS</a>

列出了 Visual Studio 编译器选项 here .

关于windows - 如何使用 cmake 在 vcproj 文件中设置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14148374/

相关文章:

ruby - 包括鞋中鞋套餐

.net - 为什么在 Option Strict On 的情况下允许将 Double 分配给 Single

c# - Visual Studio 重建未修改的项目

linux - 处理器功能的 CMake 测试

c++ - 附加到 CMAKE_C_FLAGS

python - OS X El Capitan 上的 dlopen 错误 "unsafe use of relative rpath"

c++ - 使用 Tab Space 字符标记 CString 问题

android - react native 运行 Hello World

c++ - mkdir Windows 与 Linux

visual-studio - 如何在 Visual Studio 中调试/分析 BSOD 转储?