如何在 qmake 中删除更改默认 CFLAGS?

Posted

技术标签:

【中文标题】如何在 qmake 中删除更改默认 CFLAGS?【英文标题】:How to remove alter default CFLAGS in qmake? 【发布时间】:2016-04-15 14:42:35 【问题描述】:

我正在使用 qmake/make 来构建一个库。目前,构建工作正常,但我们无法使用生成的库。

qmake 生成这个 Makefile:

CFLAGS        = -Wall -pedantic -fPIC -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -O2 $(DEFINES)
CXXFLAGS      = -Wall -pedantic -fPIC -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -O2 $(DEFINES)

当修改 Makefile 并使用这些选项时,它可以工作:

CFLAGS        = -Wall -pedantic -fPIC
CXXFLAGS        = -Wall -pedantic -fPIC

我的 .pro 文件包含以下信息:

TEMPLATE = lib subdirs
CONFIG = create_prl staticlib
QMAKE_CXXFLAGS = -Wall -pedantic -fPIC
QMAKE_CFLAGS = -Wall -pedantic -fPIC
# and Sources + headers

问题是如何告诉 qmake 只生成需要的标志? (即-Wall -pedantic -fPIC

【问题讨论】:

您确实需要开始一个一个地删除这些选项,并找出哪些会导致问题。我的直觉是有一两个有问题的选择。 -m64 创建 64 位代码,您是否尝试与 32 位代码链接? 它在哪个平台上(您使用的 mkspec 是什么)? 如果您需要更改编译选项,则必须修改qtbase/mkspecs中的相关文件,这些文件来自这些选项,然后重新编译并重新安装Qt,然后重新编译您的应用程序。如果您更改编译器选项,您的库也会与 Qt 二进制不兼容,因此您无法重用现有的 Qt 二进制文件! 您还应该决定是要从您的库中公开 C++ API 还是 C API。如果你公开了一个 C api,那么 C++ 编译器选项对你的库的用户来说并不重要,除了确保正确选择了 32/64 位机器。 我一个一个地尝试了每个标志,当使用超过我需要的时候它就不起作用了。 好的,到底是什么问题?怎么不行? 【参考方案1】:

我使用这些命令成功删除了所有标志:

QMAKE_CXXFLAGS_RELEASE = -Wall -pedantic -fPIC
QMAKE_CFLAGS_RELEASE = -Wall -pedantic -fPIC

【讨论】:

以上是关于如何在 qmake 中删除更改默认 CFLAGS?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 和静态库文件 - 如何编译

如何更改 Qt Creator 构建工具?

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

如何防止在 make clean 上运行 qmake?

如何在 go build 命令行而不是在 go 源文件中指定 CFLAGS 参数?

Qt:如何告诉 Qmake 在 Visual Studio 项目中包含 ws2_32