C++ 在qmake文件(.pro)中添加这些命令的含义是什么

C++ 在qmake文件(.pro)中添加这些命令的含义是什么,c++,qt,qt5,C++,Qt,Qt5,简而言之,我想将应用程序的类型更改为win32 app,然后,我在.pro文件中使用了以下命令 CONFIG -=windows QMAKE_LFLAGS += $$QMAKE_LFLAGS_WINDOWS 使用前面的命令后,应用程序可以正常工作。 但问题是我不知道这些命令中每个命令的含义 有人能解释这些命令中的每个命令吗?CONFIG告诉qmake您正在为特定平台构建,qmake\u LFLAGS指定您需要哪些特定于平台的库。让我们看看CONFIG-=windows 摘自qmake手册: 配

简而言之,我想将应用程序的类型更改为
win32 app
,然后,我在
.pro文件中使用了以下命令

CONFIG -=windows
QMAKE_LFLAGS += $$QMAKE_LFLAGS_WINDOWS
使用前面的命令后,应用程序可以正常工作。
但问题是我不知道这些命令中每个命令的含义


有人能解释这些命令中的每个命令吗?
CONFIG
告诉qmake您正在为特定平台构建,
qmake\u LFLAGS
指定您需要哪些特定于平台的库。

让我们看看
CONFIG-=windows

摘自qmake手册:

配置

CONFIG变量指定项目配置和编译器 选项。这些值将由qmake内部识别,并具有 特殊意义。具体如下

[……]

以下选项定义应用程序/库类型:

windows-目标是Win32窗口应用程序(仅适用于应用程序)。这个 正确的包含路径、编译器标志和库将自动 将添加到项目中

控制台-目标是Win32控制台应用程序(仅适用于应用程序)。这个 正确的包含路径、编译器标志和库将自动 将添加到项目中

手册的另一个摘录:

操作员

在许多项目文件中,赋值(=)和追加(+=)运算符 可用于包含有关项目的所有信息。这个 典型的使用模式是为变量指定一系列值, 并根据各种测试的结果附加更多值自 qmake使用默认值定义某些变量,有时 需要使用删除(-=)运算符筛选出 不是必需的。

-=运算符从变量的值列表中删除一个值:

定义-=使用我的东西

上面一行从预处理器列表中删除USE_MY_内容 定义要放入生成的Makefile中的

因此,使用
CONFIG-=windows
可以从变量
CONFIG
中的值列表中删除值
windows
。看起来
windows
是平台上
CONFIG
的默认值之一,您需要删除该值。值
windows
定义您的目标是Win32窗口应用程序。通过删除它,您声明不希望使用Win32 window应用程序。如果您的目标是Win32 console应用程序,则建议显式声明它:
CONFIG+=console

现在让我们看看
QMAKE\u LFLAGS+=$$QMAKE\u LFLAGS\u WINDOWS

手册摘录:

QMAKE_LFLAGS

此变量包含传递给 连接器如果需要更改用于特定平台的标志 或项目类型,使用其中一个专用变量 目的而不是此变量

[……]

QMAKE\u LFLAGS\u窗口

这仅在Windows上使用

此变量包含构建Windows GUI项目时的链接标志 (即非控制台应用程序)。此变量的值为 通常由qmake或qmake.conf处理,很少需要 修改


这意味着如果要更改标志,则应更改
QMAKE\u LFLAGS\u控制台
QMAKE\u LFLAGS\u窗口
。但是,您通过添加
QMAKE\u LFLAGS\u WINDOWS
的值直接更改了
QMAKE\u LFLAGS\u WINDOWS
,这很奇怪,因为它包含用于构建Win32窗口应用程序的链接标志,并且您使用
CONFIG-=WINDOWS
声明您不希望拥有Win32窗口应用程序。

因此您应该阅读@M的文档:我已经阅读了谢谢,但是
-=windows
,它在这里的意思是什么?首先,谢谢你的解释。然后,这是最重要的一点的摘录:
但是你通过添加“QMAKE\LFLAGS\u windows”的值直接更改了“QMAKE\u LFLAGS”这很奇怪,因为它包含用于构建Win32 window应用程序的链接标志,并且您用“CONFIG-=windows”声明您不希望使用Win32 window应用程序。
问题就在这一点上,为什么从这些命令中删除任何一个时,项目都不起作用,必须是两者都存在。@LionKing我的信息太少,无法回答你的问题。我不知道你想建什么。您提到的是
win32 app
,但是是哪种类型,窗口还是控制台win32 app?我不知道你在用哪个编译器。我只有一个猜测:QMAKE_LFLAGS_控制台和QMAKE_LFLAGS_窗口可能有一个共同的部分,即在这两个变量中都可以找到一些值。这就是为什么将QMAKE_LFLAGS_窗口的值添加到QMAKE_LFLAGS对您有效的原因。请将
QMAKE\u LFLAGS+=$$QMAKE\u LFLAGS\u窗口
替换为
QMAKE\u LFLAGS+=$$QMAKE\u LFLAGS\u控制台
,让我们看看它是否适用于您。我正在使用
Qt5.1.1
链接到
MSVS2010编译器
,其目的是使用。除非我在qmake文件(
.pro
)中编写了上述命令,否则SDL应用程序无法工作。@LionKing通过运行qmake从.pro文件中生成Makefile.Release和Makefile.Debug,备份它们,然后从.pro文件中删除有问题的两行,并生成新的Makefile.Release和Makefile.Debug文件。然后你会有两个Makefile.Release和两个Makefile.Debug文件,你可以比较并看到它们之间的差异。虽然我仍然不明白,但你应该是最好的答案,以及你一直处于这种状态的原因