将make和cmake的make合并到构建系统中

时间:2018-07-12 08:36:06

标签: c++ makefile cmake

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

include $(PROJECT_CONF_DIR)/common/something.mk

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

以上语法将导致始终被视为过期的目标,即,每次您运行make directories-default(或make all)时,将执行命令。如果不想每次都重新运行命令,可以使用custom command

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仅在您第一次运行时运行命令。您还可以使用add_custom_command中的DEPENDS参数来创建命令的依赖链。