c - 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 中没有合适的位置。为此,我需要降低一些层次,并失去重建它的原因的可追溯性。
解决方案
怎么做条件?
ifneq ($(wildcard MyCfile.C),)
myCFile.o: compilerflagChange
endif
注意:您对字母大小写的使用真的很不寻常(myCFile.o
vs. MyCfile.C
)。我知道最流行的操作系统不区分大小写,但您应该认真考虑更一致的拼写方案。可移植性,尤其是免费的时候,是一件好事。
推荐阅读
- c# - 有没有办法在 Angular 中单击按钮时从 SQL Server 数据库表中下载数据的 csv 文件
- reactjs - 如何更改依赖项的属性?
- r - 添加有序的星期几变量
- angular - 无法在角度上读取 websocket
- python - 甚至无法在 Colab 中运行具有 TF 2.0 和 GPU 支持的基本示例
- .net-core - 是否有适用于 .NET Core 3.0 应用程序的 XSLT 和 XQuery 处理器?
- de4dot - 设置 CilBody.KeepOldMaxStack 或 MetadataOptions.Flags
- javascript - useState 如何更新我们的状态?
- sql-server - 在 SQL Server 中使用索引和键对表进行完整备份
- google-apps-script - 在 Google 表格中自动执行动态 IMPORTRANGE