Qt Creator和条件构建

时间:2012-08-02 16:42:03

标签: qt qt-creator

在我们的项目中,如果定义了MACRO,我们添加了一些源文件和头文件。我们这样做,在.pro文件中:

contains(DEFINES, MY_DEF) {
message("Support MY_DEF")
INCLUDEPATH += \
    my_include_dir
SOURCES += \
    source1.cpp \
    source2.cpp
HEADERS +=  \
    my_include_dir/header1.h \
    my_include_dir/header2.h
FORMS +=  \
    myform.ui
}

这在构建期间工作正常。如果未定义MY_DEF,则不会编译文件。 MY_DEF定义如下:

DEFINES += MY_DEF

奇怪的是,Qt Creator始终显示项目树中的文件,而MY_DEF是否已定义。如果没有定义,它们不会用于构建,但它们仍然显示和编辑,搜索可以扫描它们等等......这是Qt Creator的错误吗?

这不是一个大问题,只是有点烦人,因为我们不清楚文件是否是项目的一部分。

3 个答案:

答案 0 :(得分:2)

甚至是故意的。有一种特殊的“累积”解析模式来收集.pro文件中提到的所有文件(基本上与用于收集“可翻译字符串”的文件相同),以便在项目树中显示。否则诸如“替换项目中的所有文件”之类的内容将产生不同的结果,具体取决于平台或运行的上下文。[并且它不是qmake的一半,但是接近所有文件...]

答案 1 :(得分:0)

这似乎是QtCreator的一个问题以及它如何读取.pro文件 - 它似乎并没有真正完全解析文件,而是选择只挑选某些位。对于仅包含在一个平台或另一个平台上的文件,我遇到了同样的问题 - 在QtCreator中,它们总是显示出来。

我希望原因是他们不想为了获取文件列表而重新实现qmake的一半,或者有些情况下尝试正确地解析它会得到错误的答案,并且他们选择了可预测的错误而不是随机错误。

答案 2 :(得分:0)

除了QMake中的条件包含之外,我还在这样的条件源代码中添加#ifdef。这样,当条件不满足时,我也会看到它在视觉上退出编译。它不如文件完全从项目树中删除那么好,但是如果它们不适用,那么在编辑它们时它们仍然看起来像是构建的一部分更好。