gpt4 book ai didi

cmake - 是否有一种通用的方法来禁用 cmake 中的可执行目标

转载 作者:行者123 更新时间:2023-12-03 14:41:35 26 4
gpt4 key购买 nike

使用我们的 CMake 构建系统,我构建了一些库和一些可执行文件。构建产品都输出到特定文件夹。

现在,问题是我有一个 VS2010 和一个 VS2008 工具链,但我只需要用于 VS2008 库的 VS2008 工具链。输出的可执行文件是两个工具链的 win32 目标,所以我只需要通过 VS2010 工具链构建可执行文件一次,而 VS2008 工具链应该跳过可执行文件并只构建所需的库(这样可以节省构建时间)。

CMake 基本脚本和整体设置也可能在 future 交付给客户,因此如果在 CMake 中有一种方法可以禁用某些目标,例如以通用方式禁用所有可执行文件,那就太好了。不然我要写很多大的IF( BUILD_EXECUTABLES ) ... ENDIF()在我的 CMakeLists.txt 中围绕我的可执行文件设置构建,当我忘记它们时,没有 CMake 给我错误。

构建是通过一些批处理文件触发的。理想情况下,我想将变量传递给 cmake通过 -D选项(例如 -D BUILD_EXECUTABLES=false )

我试图包装 ADD_EXECUTABLE宏,但这不起作用,因为我有类似的电话TARGET_LINK_LIBRARIES然后提示不存在的目标。

我还可以将输出目录设置为一些可以在之后删除的垃圾文件夹,但是(如前所述)不会节省构建时间。 (我们有一个相当大的项目。)

关于如何以干净和通用的方式实现这一目标的任何想法?

最佳答案

CMake 目标有两个属性来控制是否默认构建目标。第一个是EXCLUDE_FROM_ALL .它指示目标是否从默认构建目标中排除。对于 Makefile 生成器,键入 make不会触发其EXCLUDE_FROM_ALL 的目标的构建。属性设置为 1。

另一个是EXCLUDE_FROM_DEFAULT_BUILD并且仅适用于 Visual Studio 生成器。如果它设置为 1,当您调用“构建解决方案”菜单命令时,目标将不是默认构建的一部分。

您可以根据选项 BUILD_EXECUTABLES 设置可执行目标的两个属性的值。 :

if (NOT BUILD_EXECUTABLES)
set_target_properties(exe1 exe2 PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
endif()

关于cmake - 是否有一种通用的方法来禁用 cmake 中的可执行目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com