在CMake中,假设一个人只是设置一个属性,那么它们之间是否有任何区别
set_target_properties(target PROPERTIES prop value)
Run Code Online (Sandbox Code Playgroud)
和
set_property(TARGET target PROPERTY prop value)
Run Code Online (Sandbox Code Playgroud)
?
参看
https://cmake.org/cmake/help/v3.0/command/set_property.html https://cmake.org/cmake/help/v3.0/command/set_target_properties.html
这意味着没有区别,但不是那么清楚.
Flo*_*ian 12
考虑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"
)
Run Code Online (Sandbox Code Playgroud)set_property(TARGET ...)可以APPEND列出APPEND_STRING目标的列表或基于字符串的属性.
例如:
add_executable(a ...)
set_property(
TARGET a
APPEND PROPERTY
INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}"
)
Run Code Online (Sandbox Code Playgroud)不同之处在于set_property,您可以定义范围.set_property除了指定目标之外,您实际上有更多选项,例如在列表中指定源文件以具有特定属性.
例如:
set_property(SOURCE src1.cpp src2.cpp PROPERTY SKIP_AUTOMOC ...)
Run Code Online (Sandbox Code Playgroud)
这会将SKIP_AUTOMOC属性添加到列出的源文件中.(这适用于Qt,其中对象的Moc'ing自动发生,有时您不希望这样).
与set_target_properties您必须指定目标和财产及其价值的地方形成对比.
set_target_properties(target PROPERTIES CXX_STANDARD 11 ...)
Run Code Online (Sandbox Code Playgroud)
希望这有帮助!
请注意,您也有相应的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 和 vs set_director y等)。
没有强烈的技术理由偏爱set_property,但是我认为它比使用旧的特定功能要好一些。
| 归档时间: |
|
| 查看次数: |
10857 次 |
| 最近记录: |