强制 gnu make 重建受编译器定义影响的对象

发布于 2024-09-09 09:47:57 字数 264 浏览 4 评论 0原文

我有一个 makefile,它在命令行上采用选项,

make OPTION_1=1

它会根据值向对象子集添加额外的编译器定义。

ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif

定义中的更改会影响包含的头文件内容 - 存根或实现会暴露给对象文件。

我怎样才能让 make 重建受此选项更改“影响”的文件?

I have a makefile that takes options at the command line

make OPTION_1=1

Based on the value it will add additional compiler definitions to a subset of objects.

ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif

The change in the definition affects the included header file content - a stub or an implementation is exposed to the object files.

How can I get make to rebuild the files 'affected' by this option changing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰之心 2024-09-16 09:47:57

我使用一个文件来记住此类选项的最后一个值,如下所示:

.PHONY: force
compiler_flags: force
    echo '$(CC_FLAGS)' | cmp -s - $@ || echo '$(CC_FLAGS)' > $@

cmp || echo 位意味着文件 compiler_flags 仅在设置更改时才会被触及,因此现在您可以编写类似的内容,

$(OBJECTS): compiler_flags

每当编译器标志发生变化。每次运行make时都会执行compiler_flags的规则,但只有当compiler_flags文件被实际修改时才会触发$(OBJECTS)的重建。

I use a file to remember the last value of such options, like this:

.PHONY: force
compiler_flags: force
    echo '$(CC_FLAGS)' | cmp -s - $@ || echo '$(CC_FLAGS)' > $@

The cmp || echo bit means the file compiler_flags is only touched when the setting changes, so now you can write something like

$(OBJECTS): compiler_flags

to cause a rebuild of $(OBJECTS) whenever the compiler flags change. The rule for compiler_flags will be executed every time you run make, but a rebuild of $(OBJECTS) will be triggered only if the compiler_flags file was actually modified.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文