C++ 仅标头和带有QMake的静态生成
我正在尝试设置一个简单的类,该类既可以用作标题,也可以用作qmake的静态类。我正在使用.pro文件中定义的宏“static\u build”控制生成是否是静态的 foo.pro:C++ 仅标头和带有QMake的静态生成,c++,qmake,C++,Qmake,我正在尝试设置一个简单的类,该类既可以用作标题,也可以用作qmake的静态类。我正在使用.pro文件中定义的宏“static\u build”控制生成是否是静态的 foo.pro: TEMPLATE = app CONFIG += c++11 CONFIG += STATIC_BUILD STATIC_BUILD { DEFINES += STATIC_BUILD } SOURCES += \ main.cpp HEADERS += \ foo.h STATIC
TEMPLATE = app
CONFIG += c++11
CONFIG += STATIC_BUILD
STATIC_BUILD {
DEFINES += STATIC_BUILD
}
SOURCES += \
main.cpp
HEADERS += \
foo.h
STATIC_BUILD {
SOURCES += \
foo.cpp
}
福安
\ifndef FOO\H
#定义FOO_H
#ifndef静态构建
#定义我的_内联
#否则
#内联定义我的_
#恩迪夫
福班{
公众:
Foo();
int getI()常量;
void setI(int值);
私人:
int i;
};
#ifndef静态构建
#包括“foo.cpp”
#恩迪夫
#endif//FOO_H
foo.cpp
#包括“foo.h”
MY_INLINE Foo::Foo(){}
MY_INLINE int Foo::getI()常量{
返回i;
}
MY_内联void Foo::setI(int值){
i=值;
}
main.cpp
#包括
#包括“foo.h”
int main(){
福福;
f、 setI(3);
std::cout这是一个已知的qmake“功能”。当它看到:
#include "foo.cpp"
在标题中(不管它是否会被“评估”),它只是不为foo.cpp
生成生成规则,因此它没有被生成。不幸的是,Qt开发人员似乎并不认为这是一个bug,而是一个特性
解决方法是创建第三个文件(如foo\u incsrc.h
),其中只有一行:
#include "foo.cpp"
并相应地更改您的foo.h
:
#ifndef STATIC_BUILD
#include "foo_incsrc.h"
#endif
这是一个已知的QMake错误,已报告过几次:
(警告:第三个bug报告中不必要的冒犯性语言)
简而言之,在<代码>中提到的“源文件”跳过生成的机制包括指令,不足以考虑<代码> >包含< /Cord>指令是否将被执行(也就是说,它不知道预处理器条件)。.@VTT这对我来说并不是一个骗局。这看起来更像是一个qmake bug。谢谢!是的,我在浪费了很多时间试图在这里找到一个错误后也想到了同样的事情,但我需要确认。我会报告它,希望它能尽快得到修复!如果我认为它们最好分开,@Nikos。现在它不能像你看到的那样自由编辑了适合!因为这是一个已知的qmake错误,所以有多个答案对我来说更糟糕。我更愿意保持我的答案不变,但谢谢!我确实更新了你的答案。我想你应该取消删除它。对同一个问题有多个观点没有错;这就是为什么系统可以有多个答案!