因此,我有一个 makefile1 ,该调用另一个 makefile2 来编译项目。我在项目中的一个.c文件中设置了一些C定义,它们通过GLOBAL_DEFINES make变量(在makefile2中)传递,该变量在调用编译器时扩展为“ -D…”。我将值传递给那些C定义作为makefile1的参数(make param1 = XX param2 = YY),虽然效果很好,但是当我不提供此参数并且仅运行 make 时,编译无法抱怨 param1 =和param2 =未定义。任何想法如何优雅地处理这个问题。
这是我实际的有效命令
make FW_VERSION_MAJOR = 33 FW_VERSION_MINOR = 4
我要在这里实现的是:我应该能够成功运行make,make param1 = XX和make param2 = YY。一种方法是将这些#define写入测试文件,以便当我运行不带参数的make时它从文件中获取param1和param2的值,如果我应用这些params,它将在文件中覆盖它们。这是处理此问题的最佳方法吗?如果是,有人可以在右边引导我 方向。
make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
答案 0 :(得分:0)
您可以在第一个Makefile中使用条件变量赋值运算符(在gnu make doc中有点隐藏):
FW_VERSION_MAJOR ?= x.x.x
这样,如果未定义FW_VERSION_MAJOR
(通过命令行分配),它将获得默认值,编译将继续进行。
它的优点是不需要更改或添加源代码。