0

我必须在我们的构建系统中合并 cmake 的品牌和品牌。构建系统应该能够使用 make 和 cmake 这两个选项。问题是 cmake 的 make 导出不包含所有变量和设置,这些变量和设置需要在我们的构建系统中设置为 make。基本上,我们使用三个复杂的构建系统进行跨平台开发,我不喜欢在很多地方设置所有东西,因为那样很难维护这样的系统。例如。来自所有构建系统中许多编码器的 makefile 包含包含常见文件,例如:

include $(PROJECT_CONF_DIR)/common/something.mk

如何通过cmake解决它?我不喜欢修改编码员的 CMakeLists.txt(最多为他们一行解决方案),我也不喜欢将 cmake 导出修改为 make 文件。基本上,我需要在 cmake 命令或 cmake 的导出(最好的)某个链接中放置一些链接,这将导致包含我们构建工具链所期望的所有“垃圾”。确保 CMakeLists.txt 可以包含许多 cmake 子项目和库。

例如,我们的 makefile 构建系统包含以下内容:

directories-default:
    mkdir -p $(BUILD_DIR)
    mkdir -p $(OBJ_DIR)

我需要在 cmake include 中以某种方式实现它。

4

1 回答 1

0

为了能够make directories-default在配置后运行,您必须创建一个 target。您可以创建一个将调用自定义命令的目标,该命令将运行您需要的 shell 命令。

add_custom_target(directories-default COMMAND mkdir -p "dir1" COMMAND mkdir -p "dir2")

上面的语法将导致一个总是被认为是过时的目标,即每次你运行make directories-default(或make all)时,命令都会被执行。如果您不想每次都重新运行该命令,则可以使用自定义命令

add_custom_command(OUTPUT "dir3" "dir4" COMMAND mkdir -p "dir3" COMMAND mkdir -p "dir4")
add_custom_target(directories-default2 DEPENDS "dir3" "dir4")

这里make directories-default2只会在您第一次运行时运行命令。您还可以使用 中的 DEPENDS 参数创建命令的依赖链add_custom_command

于 2018-07-12T11:52:29.263 回答