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.hfile3.cpp 文件:

此外 file3.hfile3.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