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, но я считаю это немного лучше, чем используя старые, специфические функции.