我正在使用GNU make Makefile构建一个具有多个目标(allclean和一些特定于项目的目标)的C项目.在调试过程中,我希望在单个构建中附加一些标志,而不必永久编辑Makefile(例如添加调试符号或设置预处理器标志).

在过go ,我是这样做的(使用调试符号示例):

make target CFLAGS+=-g

不幸的是,这不是附加到CFLAGS变量,而是清除它并阻止它编译.有没有一种干净利落的方法,不用定义附加在CFLAGSLDFLAGS末尾的某种伪变量就可以做到这一点呢?

推荐答案

看看override directive号.您可能需要修改Makefile一次,但它应该可以执行您想要的操作.

makefile示例:

override CFLAGS += -Wall

app: main.c
    gcc $(CFLAGS) -o app main.c 

命令行示例:

$ make
gcc -Wall -o app main.c 
$ make CFLAGS=-g
gcc -g -Wall -o app main.c 

C++相关问答推荐

我的C语言中的回归函数如何工作?

Visual Studio和Codebocks中的不同输出

AVX-512 BF 16:直接加载bf 16值,而不是从fp 32转换

函数指针始终为零,但在解除引用和调用时有效

如何确保内存分配在地址附近?

C strlen on char array

使用SWI—Prolog的qsave_program生成二进制文件有什么好处?'

常数函数指针优化

在C中使用强制转换将uint16_t转换为uint8_t [2]是否有效?

字符串令牌化xpath表达式

我编译了一个新的c程序,并收到以下错误

如何跨平台处理UTF-16字符串?

Win32API Wizzard97 PropSheet_SetWizButton不工作

我的程序在收到SIGUSR1信号以从PAUSE()继续程序时总是崩溃()

Kdb:仅升级指定的列

有什么方法可以将字符串与我们 Select 的子字符串分开吗?喜欢:SIN(LOG(10))

For循环中的变量行为不符合预期.[C17]

条件跳转或移动取决于未初始化值(S)/未初始化值由堆分配创建(Realloc)

函数指针作为函数参数 - 应该使用 const 吗?

'printf("%s", user_input)' 危险吗?