覆盖 make 中的构建规则
我正在使用 Makefile 来构建嵌入式项目。我从许多以前的开发人员那里继承了该项目,他们还没有充分利用 Make 的潜力,并且我希望能够使用构建命令上的定义在 makefile 中指定项目版本。但是,已经有一个构建所有对象 (.o) 文件的构建规则。有什么方法可以覆盖特定目标文件的构建规则,以便我可以向编译器添加 -D 标志?
我希望能够在 makefile 中指定项目版本的另一个原因是,这样我就可以让它使用构建过程生成的结果文件的名称中的构建版本来生成工件。
I'm using a Makefile to build an embedded project. I've inherited the project from numerous previous developers who haven't been using Make to its full potential, and I'd like to be able to specify the project version in the makefile using defines on the build command. However, there's already a build rule that builds all the object (.o) files. Is there any way to override that build rule for a specific object file so that I can add -D flags to the compiler ?
Another reason I'd like to be able to specify the project version in the makefile is so that I can have it generate artifacts with the build version in the names of the resulting files produced by the build process.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
<前>%.o:
做通用事情
西奥:
do_specific_things -Dproject_version
如果您使用 GNU make 并且只想更改编译器选项,则可以使用特定于目标的变量,如下所示:
这也可以递归工作,即 xo 的特定于目标的值也有效对于 xo 依赖的所有目标,这意味着如果您在 makefile 中构建多个可执行文件,则可以在可执行文件本身上设置特定于目标的变量,该变量将对所有目标文件有效:
If you are using GNU make and you only want to change compiler options, you can use target-specific variables, like so:
This also works recursively, i.e. the target-specific value for x.o also is in effect for all targets which x.o depends on, meaning that if you build multiple executables in your makefile, you can set a target-specific variable on the executable itself, which will be in effect for all the object files: