CMake: есть ли разница между set property(TARGET ...) и set target properties?
в CMake, предполагая, что вы просто устанавливаете одно свойство, есть ли разница между
set_target_properties(target PROPERTIES prop value)
и
set_property(TARGET target PROPERTY prop value)
?
Cf.
https://cmake.org/cmake/help/v3.0/command/set_property.html https://cmake.org/cmake/help/v3.0/command/set_target_properties.html
что означает, что нет никакой разницы, но не так ясно.
3 ответов
считают 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 ...)
canAPPEND
в список илиAPPEND_STRING
к строковому свойству целей.для пример:
add_executable(a ...) set_property( TARGET a APPEND PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}" )
ссылки
разница в том, что с set_property
, вы можете определить область. У вас на самом деле есть больше вариантов с set_property
кроме указания целевого объекта, например указания исходных файлов в списке для определенного свойства.
например:
set_property(SOURCE src1.cpp src2.cpp PROPERTY SKIP_AUTOMOC ...)
это добавит свойство SKIP_AUTOMOC в список исходных файлов. (Это для Qt, где Moc'ING объектов происходит автоматически, и иногда вы этого не хотите).
контраст с set_target_properties
где необходимо указать цель и свойство и его значение.
set_target_properties(target PROPERTIES CXX_STANDARD 11 ...)
надеюсь, это поможет!
обратите внимание, что у вас также есть соответствующие set_*_properties
функции для некоторых других типов свойства: set_source_files_properties
, set_directory_properties
и set_tests_properties
. Примечательно, что отсутствуют сеттеры для install и global properties.
причина в том, что эти функции предшествуют общие set_property
вызов, который был введен только с CMake 2.6, вместе с общим капитальным ремонтом системы собственности до того, что это сегодня.
в наши дни люди, как правило, предпочитают общий set_property
, поскольку это более современная функция и предоставляет несколько дополнительных функций. Он также предлагает более последовательный синтаксис, чем старые функции (например. set_directory_properties
не позволяет указать каталог в качестве параметра, set_source_files vs set_directory, etc.).
нет сильной технической причины для предпочтения set_property
, но я считаю это немного лучше, чем используя старые, специфические функции.