首页 > 解决方案 > makefile:如果存在 c 文件,则构建目标文件

问题描述

我有一个使用编译器标志的 c 文件。当编译器标志发生变化时,我强制 c 文件通过在 makefile 中写入来更新它的值:

compilerflagChange: FORCE
    echo ${CFLAGS} | cmp -s - $@ || echo ${CFLAGS} > $@

myCFile.o: compilerflagChange

这工作得很好,除非我清理整个项目然后运行。在那种情况下,myCFile.C 在来到语句之前还没有生成

myCFile.o: compilerflagChange

这将导致构建崩溃并出现错误“MyCfile.C,没有这样的文件”。

问题:如何根据 C 文件是否存在来制定规则?“如果文件存在+cflagChange,更新文件,否则什么都没有”

更多信息:“每次生成 MyCFile.c 之后,为什么不重新构建 myCFile.o 呢?” makefile 中没有合适的位置。为此,我需要降低一些层次,并失去重建它的原因的可追溯性。

标签: cmakefile

解决方案


怎么做条件?

ifneq ($(wildcard MyCfile.C),)
myCFile.o: compilerflagChange
endif

注意:您对字母大小写的使用真的很不寻常(myCFile.ovs. MyCfile.C)。我知道最流行的操作系统不区分大小写,但您应该认真考虑更一致的拼写方案。可移植性,尤其是免费的时候,是一件好事。


推荐阅读