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

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

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

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

Solutions Collecting From Web of "你如何使用cmake在vcproj文件中设置属性?"

对于您列出的标志,您可以将以下内容添加到您的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_CXX_FLAGS

有关这些命令的进一步信息可以:

cmake --help-variable "CMAKE_<LANG>_FLAGS_DEBUG"
cmake --help-command set_target_properties
cmake --help-property COMPILE_FLAGS

这里列出了 Visual Studio编译器选项。

每个属性都对应于编译器的命令行选项( cl )。 您可以在CMakeList中使用这些命令行选项(使用像CMAKE_CXX_FLAGS这样的变量,像add_definitions()这样的命令以及像COMPILE_FLAGS这样的COMPILE_FLAGS ),并且在生成它们时,CMake自动将它们转换为.vc [x] proj文件中的设置。 那些不明白的只是添加为“附加的命令行选项”。