在配置/制作时将编译标志附加到 CFLAGS 和 CXXFLAGS

Posted

技术标签:

【中文标题】在配置/制作时将编译标志附加到 CFLAGS 和 CXXFLAGS【英文标题】:Append compile flags to CFLAGS and CXXFLAGS while configuration/make 【发布时间】:2014-06-17 22:15:46 【问题描述】:

我正在尝试构建的项目具有默认标志

CFLAGS = -Wall -g -O2

CXXFLAGS = -g -O2

我需要在这两个变量上附加一个标志 -w(以删除:'将所有警告视为错误')

我有办法解决,给

make 'CFLAGS=-Wall -g -O2 -w'; 'CXXFLAGS=-g -O2 -w'

运行./configure并静态修改Makefile

但我想在运行 configuremake 时将我的选项附加到现有选项中

帖子 Where to add a CFLAG, such as -std=gnu99, into an autotools project 方便地使用宏来实现这一点。

【问题讨论】:

【参考方案1】:

你几乎是对的;为什么要加分号?

configure 线上进行操作:

 ./configure CFLAGS='-g -O2 -w' CXXFLAGS='-g -O2 -w'

make 行:

 make CFLAGS='-g -O2 -w' CXXFLAGS='-g -O2 -w'

但是,这并不能真正消除 将所有警告视为错误;删除所有警告。所以同时指定-Wall-w 没有意义。如果您想保留警告但不将其视为错误,请使用 -Wall -Wno-error 标志。

另外,大多数默认启用-Werrorconfigure 脚本也有一个标志,例如--disable-werror 或类似的。运行./configure --help 看看有没有类似的东西。

【讨论】:

有没有办法让我永远不指定此统计信息,例如 CFLAGS='$CFLAGS ',以保留已配置的所有内容,并且不知道它。跨度> 不,这是不可能的(至少在不修改 makefile 的情况下是不可能的)。根据 autoconf 编码标准,CFLAGS 的默认值始终只启用调试/优化,因此对于大多数系统,它通常应始终为-g -O2。在CFLAGS 中添加-I-D 等其他重要标志是不正确的(根据编码标准)。所以总是覆盖它应该是安全的。 如果你不能在不保留包默认值的情况下分配 CFLAGS,那么软件包包含一个应该报告给包维护者的错误。

以上是关于在配置/制作时将编译标志附加到 CFLAGS 和 CXXFLAGS的主要内容,如果未能解决你的问题,请参考以下文章

使用 GNU make 编译启用配置文件的包

EXTRA_CFLAGS 的目的是啥?

将编译标志附加到 Linux 内核构建

cmake如何在C ++中将编译器标志附加到末尾

OpenCV C++ Linux g++ 编译

gcc 编译器标志和符号表之间的不兼容函数地址