有没有办法从顶层 CMakeLists.txt
中获取 CMake 项目的所有目标,即以编程方式迭代目标?
我想这样做的原因是将一些 XCode 特定设置应用于每个目标。 .
if (CMAKE_GENERATOR MATCHES "Xcode")
include(sanitize_xcode)
sanitize_xcode(myTarget)
endif()
仅供参考 - 消毒模块看起来像这样。 .
macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
endmacro (set_xcode_property)
macro (sanitize_xcode TARGET)
set_xcode_property(${TARGET} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Debug] "YES")
set_xcode_property(${TARGET} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=MinSizeRel] "NO")
set_xcode_property(${TARGET} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=RelWithDebInfo] "YES")
set_xcode_property(${TARGET} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release] "NO")
set_xcode_property(${TARGET} COPY_PHASE_STRIP[variant=Debug] "NO")
set_xcode_property(${TARGET} COPY_PHASE_STRIP[variant=MinSizeRel] "YES")
set_xcode_property(${TARGET} COPY_PHASE_STRIP[variant=RelWithDebInfo] "NO")
set_xcode_property(${TARGET} COPY_PHASE_STRIP[variant=Release] "YES")
set_xcode_property(${TARGET} GCC_OPTIMIZATION_LEVEL[variant=Debug] "0")
set_xcode_property(${TARGET} GCC_OPTIMIZATION_LEVEL[variant=MinSizeRel] "s")
set_xcode_property(${TARGET} GCC_OPTIMIZATION_LEVEL[variant=RelWithDebInfo] "3")
set_xcode_property(${TARGET} GCC_OPTIMIZATION_LEVEL[variant=Release] "3")
set_xcode_property(${TARGET} IPHONEOS_DEPLOYMENT_TARGET[variant=Debug] "7.0")
set_xcode_property(${TARGET} IPHONEOS_DEPLOYMENT_TARGET[variant=MinSizeRel] "7.0")
set_xcode_property(${TARGET} IPHONEOS_DEPLOYMENT_TARGET[variant=RelWithDebInfo] "7.0")
set_xcode_property(${TARGET} IPHONEOS_DEPLOYMENT_TARGET[variant=Release] "7.0")
endmacro (sanitize_xcode)
原文由 learnvst 发布,翻译遵循 CC BY-SA 4.0 许可协议
将我的评论变成答案
拥有所有目标的列表是一个已经存在一段时间的愿望,但是全局属性
TARGETS
尚未实现(至于 2016 年 5 月, 请参阅“列出所有目标”讨论)。编辑: 现在已实现: Global
BUILDSYSTEM_TARGETS
属性随 CMake 3.7 发布因此,您可以使用 CMake 脚本本身来实现这一点 - 正如 @DevSolar 评论/回答或喜欢 这里- 但我在使用 CMake 的过程中了解到,您还可以在全球范围内更改许多目标属性。例如,大多数目标属性默认为等效的全局变量设置。
您可以在您的情况下利用这一点,并通过将以下内容添加到全局
CMakeLists.txt
文件中来解决此问题:参考
XCODE_ATTRIBUTE_<an-attribute>
CMAKE_XCODE_ATTRIBUTE_<an-attribute>