我有一个基于现有makefile的构建系统的项目,我想在其中添加基于cmake的现有组件。
集成cmake配置步骤的最佳方法是什么?作为$(shell)调用,求值一些变量?在每次调用时运行configure ...
如何整合建筑物本身?只是(MAKE)-C cmake-build-dir [targets]?
CMake的目标是生成一个Makefile,所以我会选择这样的东西:
CMAKE_BUILD_DIR := some_dir
CMAKE_SOURCE_DIR := some_src_dir
$(CMAKE_BUILD_DIR)/Makefile: $(CMAKE_SOURCE_DIR)/CMakeLists.txt
cmake -S $(<D) -B $(@D)
.PHONY: $(CMAKE_BUILD_DIR)/built_executable_or_library # to allow CMake's make check the build
$(CMAKE_BUILD_DIR)/built_executable_or_library: $(CMAKE_BUILD_DIR)/Makefile
$(MAKE) -C $(@D) $(@F)
当Makefile不存在时,应调用CMake配置步骤,并直接运行make
以构建所需的内容(可能需要根据需要定制被调用的目标)。 CMake生成的Makefile检查生成的生成系统本身,因此将根据需要对其进行重新配置。
除了@raspy答案之外,我还将.PHONY添加到cmake命令。
.PHONY: $(CMAKE_BUILD_DIR)/Makefile
$(CMAKE_BUILD_DIR)/Makefile: $(CMAKE_SOURCE_DIR)/CMakeLists.txt
cmake -S $(<D) -B $(@D)
由于文件Makefile已经存在,并且其依赖关系未更改,除非我们将Makefile始终视为过期,否则更改源时将不会执行任何操作。