如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章
在配置/制作时将编译标志附加到 CFLAGS 和 CXXFLAGS