【发布时间】:2020-11-08 16:28:23
【问题描述】:
我正在做一个需要 cmake 的项目。我想在我的 makefile 中添加一些自定义规则,但我不知道该怎么做。
c 源文件和头文件都在同一个目录中。在同一目录下还有一些.def 文件,它们是一些头文件的源代码#included 在编译过程中的源代码中。
如果我要在 makefile 中执行此操作,我会使用一个简单的规则,例如
.SUFFIXES: .def
.def.h:
$(PREPROC) $< > $@
我怎样才能用 cmake 做到这一点??
我尝试了以下各种排列,无论有无 cmake 工作目录规范:
add_custom_command(
OUTPUT vvr_const.h
PRE_BUILD
COMMAND preproc vvr_const.def > vvr_const.h
DEPENDS vvr_const.def
)
add_custom_target(vvr_const.h DEPENDS vvr_const.def)
但是编译c源文件时没有生成头文件,所以编译失败。我还尝试了一种变体,将上面的最后一行替换为
set_property(SOURCE main.c APPEND PROPERTY OBJECT_DEPENDS vvr_const.h)
在这种情况下,头文件是提前正确生成的,但是make找不到,并抱怨没有规则使目标.h。
理想情况下,这将是一条通用规则,就像上面的 make 规则一样,但如果需要的话,我不反对为每个 .def 文件制定单独的规则。
干杯。
【问题讨论】:
标签: makefile cmake header-files preprocessor