在CMake中,假设一个人只是设置一个属性,那么
之间是否存在差异set_target_properties(target PROPERTIES prop value)
和
set_property(TARGET target PROPERTY prop value)
比照。
https://cmake.org/cmake/help/v3.0/command/set_property.html https://cmake.org/cmake/help/v3.0/command/set_target_properties.html
这意味着没有区别,但并不清楚。
答案 0 :(得分:8)
将set_target_properties()
视为set_property()
的专用形式。
set_target_properties(...)
是一个便利功能,因为它允许设置多个目标的多个属性。
例如:
add_executable(a ...)
add_executable(b ...)
set_target_properties(
a
b
PROPERTIES
LINKER_LANGUAGE CXX
FOLDER "Executable"
)
set_property(TARGET ...)
可以APPEND
到列表 - 或APPEND_STRING
到基于字符串的目标属性。
例如:
add_executable(a ...)
set_property(
TARGET a
APPEND PROPERTY
INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}"
)
答案 1 :(得分:5)
与set_property
不同的是,您可以定义范围。除了指定目标之外,您实际上有set_property
的更多选项,例如在列表中指定源文件以具有特定属性。
例如:
set_property(SOURCE src1.cpp src2.cpp PROPERTY SKIP_AUTOMOC ...)
这会将SKIP_AUTOMOC属性添加到列出的源文件中。 (这适用于Qt,其中对象的Moc自动发生,有时您不想这样做。)
与set_target_properties
对比,您必须在其中指定目标及其属性及其值。
set_target_properties(target PROPERTIES CXX_STANDARD 11 ...)
希望这有帮助!
答案 2 :(得分:4)
请注意,对于其他一些类型的媒体资源,您还有set_*_properties
个函数:set_source_files_properties
,set_directory_properties
和set_tests_properties
。值得注意的是缺少安装和全局属性的设置器。
这样做的原因是这些函数早于一般set_property
调用,这只是在CMake 2.6中引入的,同时对属性系统进行了一般性的改革。
现在,人们倾向于选择通用set_property
,因为它是更现代的功能,并提供了一些额外的功能。它还提供比旧函数更一致的语法(例如。set_directory_properties
不允许将目录指定为参数,set_source_file s vs set_director y 等)。
没有强烈的技术理由偏爱set_property
,但我认为它比使用旧的特定功能稍微好一点。