QMake:范围如何工作?

发布于 2024-10-08 00:08:15 字数 1015 浏览 6 评论 0原文

由于某些奇怪的原因,我无法让 QMake 中的范围正常工作。这是我的项目文件中的一些代码:

debug {
    QMAKE_CXXFLAGS_DEBUG += -g3 -O0
    message ("Some debug output")
}

release {
    DEFINES += QT_NO_DEBUG
    DEFINES += QT_NO_DEBUG_OUTPUT
    message ("No debug output")
}

但是当我在调试模式下编译它时,这是我得到的 gcc 命令行:

g++ -c -g -g3 -O0 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DLIBPROVERIM_LIBRARY -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DWINDOWS -DQT_DLL -DQT_SQL_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"c:\Qt\2010.05\qt\include\QtCore" -I"c:\Qt\2010.05\qt\include\QtNetwork" -I"c:\Qt\2010.05\qt\include\QtGui" -I"c:\Qt\2010.05\qt\include\QtXml" -I"c:\Qt\2010.05\qt\include\QtSql" -I"c:\Qt\2010.05\qt\include" -I"c:\Qt\2010.05\qt\include\ActiveQt" -I"debug" -I"..\proverim" -I"." -I"c:\Qt\2010.05\qt\mkspecs\win32-g++" -o debug\PForm.o ..\proverim\PForm.cc

请注意,我尝试清理我的项目,以及手动删除 makefile。现在为什么它从两个范围中获取定义?另外,我没有看到任何消息,它们应该在哪里?

For some weird reason I can't get scopes in QMake to work. Here's some code in my project file:

debug {
    QMAKE_CXXFLAGS_DEBUG += -g3 -O0
    message ("Some debug output")
}

release {
    DEFINES += QT_NO_DEBUG
    DEFINES += QT_NO_DEBUG_OUTPUT
    message ("No debug output")
}

But when I compile it in debug mode, here's the gcc command line I get:

g++ -c -g -g3 -O0 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DLIBPROVERIM_LIBRARY -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DWINDOWS -DQT_DLL -DQT_SQL_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"c:\Qt\2010.05\qt\include\QtCore" -I"c:\Qt\2010.05\qt\include\QtNetwork" -I"c:\Qt\2010.05\qt\include\QtGui" -I"c:\Qt\2010.05\qt\include\QtXml" -I"c:\Qt\2010.05\qt\include\QtSql" -I"c:\Qt\2010.05\qt\include" -I"c:\Qt\2010.05\qt\include\ActiveQt" -I"debug" -I"..\proverim" -I"." -I"c:\Qt\2010.05\qt\mkspecs\win32-g++" -o debug\PForm.o ..\proverim\PForm.cc

Note that I tried cleaning my project, as well as manually removing makefiles. Now why does it take defines from both scopes? Also, I don't see any messages, where are they supposed to be?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情场扛把子 2024-10-15 00:08:15

我也有同样的问题。为了解决这个问题,我使用了 CONFIG“函数”而不是范围。
.pro 文件的该部分将是:

CONFIG(debug, debug|release) {
QMAKE_CXXFLAGS_DEBUG += -g3 -O0
message("DEBUG!")
} else {
DEFINES += QT_NO_DEBUG
DEFINES += QT_NO_DEBUG_OUTPUT
message("RELEASE!")
}

在一个简单的“HelloWorld”项目中尝试过,一切似乎都工作正常。

I had the same problem. To solve it I used the CONFIG "function" instead of the scopes.
That section of your .pro file would be:

CONFIG(debug, debug|release) {
QMAKE_CXXFLAGS_DEBUG += -g3 -O0
message("DEBUG!")
} else {
DEFINES += QT_NO_DEBUG
DEFINES += QT_NO_DEBUG_OUTPUT
message("RELEASE!")
}

Tried it in a simple "HelloWorld" project and everything seemed to work fine.

素手挽清风 2024-10-15 00:08:15

还有另一个名为 debug_and_release 的配置选项,它允许您同时构建两种模式。在这种情况下,您的两个范围都被触发是正确的。

尝试将 CONFIG=debug 添加到您的初始 qmake 命令中;它应该覆盖任何自动默认值并限制您进入调试模式。

作为一种调试措施,您还可以尝试通过 .pro 文件中的 message($$CONFIG) 输出 CONFIG 的全部内容。这些消息是在 qmake 运行时打印的,而不是在编译 makefile 时打印的。

There is another config option called debug_and_release which allows you to build both modes simultaneously. In that case, it's correct that both of your scopes are getting triggered.

Try adding CONFIG=debug to your initial qmake command; it should override any automatic defaults and limit you to debug mode.

As a debugging measure, you could also try outputting the entire contents of CONFIG via message($$CONFIG) in your .pro file. The messages are printed when qmake is run, not when the makefiles are compiled.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文