2012-08-02 90 views
2

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

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的错误吗?

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

回答

0

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

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

+0

这就是我的想法。也许我应该在官方的Qt论坛上发布这个问题。谢谢。 – 2012-08-03 08:18:47

2

甚至有意为之。有一种特殊的“累积”解析模式,用于收集.pro文件中提到的所有文件(实质上与收集“可翻译字符串”相同)以供在项目树中显示。否则,像“在项目中的所有文件中替换”这样的结果会根据平台或运行的上下文而产生不同的结果。[并且,它不是qmake的一半,但接近它的全部...]

+0

你能否提供一些指向它的链接作为故意?我有一个情况,其中SUBDIRS模板的条件不正确总是发布所有的包,而不仅仅是那些选定的包。我很好奇他们如何解决这个问题,我想多读一下它 – quetzalcoatl 2012-10-05 07:30:58

0

除了QMake中的条件包含之外,我还在这样的条件源代码周围添加了#ifdef。这样我也可以看到,当条件不满足时,它会在编译时视觉化。它不如完全从项目树中完全删除文件,但是如果它们不适用时进行编辑,它们仍然会显示为它们是构建的一部分,这样做会更好。