QMake 条件不起作用
QMake conditions don't work
我创建了一个项目,我希望在该项目中为不同的平台添加不同的源文件。为此,我使用了 conditions
:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = untitled16
TEMPLATE = app
MY_WIN_SOURCES = \
file1.cpp \
file2.cpp
MY_WIN_HEADERS = \
file1.h \
file2.h
MY_LINUX_SOURCES = \
file1.cpp \
file3.cpp
MY_LINUX_HEADERS = \
file1.h \
file3.h
FORMS += mainwindow.ui
win32 {
SOURCES = $$MY_WIN_SOURCES
HEADERS = $$MY_WIN_HEADERS
message("Windows...")
} else {
SOURCES = $$MY_LINUX_SOURCES
HEADERS = $$MY_LINUX_HEADERS
message("Not Windows...")
}
但是当我保存 *.pro
文件时,Windows
上的项目树如下所示:
这是错误的,因为在 Windows 我不应该有 file3.h
和 file3.cpp
文件:
此外 file3.h
和 file3.cpp
也被编译,不应该被编译。此外,保存 *.pro
文件后出现的唯一消息是 Windows...
谁能告诉我我做错了什么?
这其实就是QtCreator的特色。它会向您显示所有包含的文件,无论条件如何,但它应该正确编译。
您可以阅读开发者列表以获取更多信息:http://lists.qt-project.org/pipermail/qt-creator/2012-March/000419.html
My understanding from earlier discussions is that this is intentional.
The theory is that you're interested in modifying the source files in
your project regardless of the build configuration you have chosen at
the moment.
/s/ Adam
我创建了一个项目,我希望在该项目中为不同的平台添加不同的源文件。为此,我使用了 conditions
:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = untitled16
TEMPLATE = app
MY_WIN_SOURCES = \
file1.cpp \
file2.cpp
MY_WIN_HEADERS = \
file1.h \
file2.h
MY_LINUX_SOURCES = \
file1.cpp \
file3.cpp
MY_LINUX_HEADERS = \
file1.h \
file3.h
FORMS += mainwindow.ui
win32 {
SOURCES = $$MY_WIN_SOURCES
HEADERS = $$MY_WIN_HEADERS
message("Windows...")
} else {
SOURCES = $$MY_LINUX_SOURCES
HEADERS = $$MY_LINUX_HEADERS
message("Not Windows...")
}
但是当我保存 *.pro
文件时,Windows
上的项目树如下所示:
这是错误的,因为在 Windows 我不应该有 file3.h
和 file3.cpp
文件:
此外 file3.h
和 file3.cpp
也被编译,不应该被编译。此外,保存 *.pro
文件后出现的唯一消息是 Windows...
谁能告诉我我做错了什么?
这其实就是QtCreator的特色。它会向您显示所有包含的文件,无论条件如何,但它应该正确编译。
您可以阅读开发者列表以获取更多信息:http://lists.qt-project.org/pipermail/qt-creator/2012-March/000419.html
My understanding from earlier discussions is that this is intentional. The theory is that you're interested in modifying the source files in your project regardless of the build configuration you have chosen at the moment.
/s/ Adam