Visual Studio的vcproj文件包含影响构建的各种设置或属性。例如,我尝试转换为cmake的项目使用的一些项目是
StringPooling="true"
RuntimeLibrary="2"
TreatWChar_tAsBuiltInType="true"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
当然还有很多其他的可以设置。问题是如何使用cmake生成项目时设置它们。有没有人知道如何在使用cmake时设置这些属性,而不是在事后编辑vcproj文件?我找不到任何解释如何通过cmake设置这些属性的东西。我知道如何设置的唯一一个是cmake特别具有跨平台内容的(例如PreprocessorDefinitions
或AdditionalIncludeDirectories
)。但我需要能够设置特定于Visual Studio的那些。
答案 0 :(得分:7)
对于您列出的标记,您需要将以下内容添加到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。
答案 1 :(得分:1)
这些属性中的每一个都对应于编译器的命令行选项(cl
)。您可以在CMakeList中设置这些命令行选项(使用CMAKE_CXX_FLAGS
等变量,add_definitions()
之类的命令和COMPILE_FLAGS
等属性),CMake会自动将它们转换为.vc [x]项目中的设置生成它们时的文件。那些不理解的东西只是添加为“附加命令行选项”。
答案 2 :(得分:1)
一般来说,你可以这样做:
set_target_properties(target_name
PROPERTIES VS_GLOBAL_CAExcludePath "....")
“VS_GLOBAL_ 可以设置为添加一个 Visual Studio 项目特定的全局变量。如果将 VS_GLOBAL_QtVersion 设置为 FindQt4.cmake 找到的 Qt 版本,Qt 集成效果会更好。例如,“4.7.3””来源:{{3 }}