【问题标题】:CMake: Is there a difference between set_property(TARGET ...) and set_target_properties?CMake:set_property(TARGET ...) 和 set_target_properties 之间有区别吗?
【发布时间】:2017-11-21 14:56:01
【问题描述】:

在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

这意味着没有区别,但不是很清楚。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    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}"
      )  
      

    参考文献

    【讨论】:

    • set_property 也支持多个目标:set_property(TARGET a b c ...)
    【解决方案2】:

    请注意,对于某些其他类型的属性,您还具有各自的 set_*_properties 函数:set_source_files_propertiesset_directory_propertiesset_tests_properties。明显没有安装和全局属性的设置器。

    原因是这些函数早于一般的 set_property 调用,该调用仅在 CMake 2.6 中引入,同时对属性系统进行了全面检修,使其达到今天的水平。

    如今,人们倾向于使用通用的set_property,因为它是更现代的功能并提供了一些附加功能。它还提供了比旧函数更一致的语法(例如,set_directory_properties 不允许将目录指定为参数,set_source_files vs set_directory 等) .

    选择set_property 并没有很强的技术原因,但我认为它的风格比使用旧的、特定的功能要好一些。

    【讨论】:

      【解决方案3】:

      不同之处在于,使用set_property,您可以定义范围。 set_property 实际上除了指定目标之外还有更多选项,例如指定列表中的源文件以具有特定属性。

      例如:

      set_property(SOURCE src1.cpp src2.cpp PROPERTY SKIP_AUTOMOC ...)
      

      这会将 SKIP_AUTOMOC 属性添加到列出的源文件中。 (这适用于 Qt,其中对象的 Moc'ing 会自动发生,有时您不希望这样)。

      set_target_properties 相比,您必须指定 Target 和属性及其值。

      set_target_properties(target PROPERTIES CXX_STANDARD 11 ...)
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-16
        • 1970-01-01
        • 2020-01-11
        • 2016-12-02
        • 2021-10-09
        • 2010-09-27
        • 2014-08-30
        • 2014-09-25
        相关资源
        最近更新 更多