如何使用CMake通过个性化命令生成Makefile?

时间:2010-06-17 22:35:16

标签: makefile project cmake tar

我喜欢保持Makefiles的灵活性和多功能性。我通常添加到make命令的任务之一是tar,例如以下指令执行此任务:

tar:
    tar -cvf $(PROGNAME).tar $(SRCS) Makefile

我的问题是:如何使用CMake生成tar等个性化命令?
我想看一些代码示例 对于完整功能,创建项目组件并将其用作参数将非常有用 ( Exempligratia :仅归档头文件或某些特定库)。

提前感谢您的回答!

1 个答案:

答案 0 :(得分:2)

tar示例的字面翻译将是:

ADD_CUSTOM_TARGET(tar
    tar -cvf ${CMAKE_CURRENT_BINARY_DIR}/${PROGNAME}.tar ${SRCS} Makefile
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

这会添加一个新的目标“tar”,它始终在作为命令行目标请求时执行给定命令,即每当您运行make tar时,它将创建一个新的tar文件。 WORKING_DIRECTORY参数将确保源文件来自源目录,而CMAKE_CURRENT_BINARY_DIR确保输出进入当前构建目录。

稍微好一点的迭代就是用tar替换${CMAKE_COMMAND} -E tar,因为这不依赖于命令行tar程序可用。因此,当您运行make tar

时,类似这样的内容将会覆盖所有头文件
SET(HEADER_FILES my.h another.h)
SET(PROGNAME myprog)
ADD_CUSTOM_TARGET(tar ${CMAKE_COMMAND} -E tar -czvf
    ${CMAKE_CURRENT_BINARY_DIR}/${PROGNAME}.tar.gz ${HEADER_FILES}
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

更好的迭代是使用CPack功能来创建源文件或二进制tar文件,但这样做的工作要多得多,也可能不是你需要的。