显示标签为“qmake”的博文。显示所有博文
显示标签为“qmake”的博文。显示所有博文

2009年4月1日星期三

QtCreator中编译qvfb失败的原因

从qtsoftware.com上下载下来的sdk包,并没有将qvfb直接编译进去。
如果在qtsdk-2009.01/qt/tools/qvfb执行qmake,然后make的话,会提示
qvfb.cpp:51:24: error: deviceskin.h: No such file or directory
qvfb.cpp:261: error: ‘DeviceSkinParameters’ was not declared in this scopeq
vfb.cpp:261: error: expected `;' before ‘parameters’
qvfb.cpp:263: error: ‘parameters’ was not declared in this scope
原因就在于DeviceSkin的代码没有被加入编译qvfb的工程

31 qvfbprotocol.cpp \
32 qvfbshmem.cpp \
33 qvfbmmap.cpp \
34 qlock.cpp \
35 qwssignalhandler.cpp
36
37 #include($QT_SOURCE_TREE/tools/shared/deviceskin/deviceskin.pri)
38 include(/home/bug/qtsdk-2009.01/qt/tools/shared/deviceskin/deviceskin.pri)
39
40 contains(QT_CONFIG, opengl) {
将37行的代码改成38行的样子就可以了,或者你将$QT_SOURCE_TREE的变量设置好了也可以

2009年3月6日星期五

在.pro Qt工程文件中根据不同版本号使用不同源码

qmake里是不提供
#if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0))
// ...
#endif
这种语法的

qmake的语法是
条件{
...执行的动作1...
}else{
...执行的动作2...
}

所以如果要执行根据版本控制的代码可以用
greaterThan(QT_MAJOR_VERSION, 4)|equals(QT_MAJOR_VERSION,4){
greaterThan(QT_MINOR_VERSION, 5)|equals(QT_MINOR_VERSION, 5){

message("bla,bla,bla ....")
}
}else{
message("pla,pla,pla ....")
}

不过需要注意的是,greaterThan和equals是在qmake代码里没有公布的,详细需要看qmake的源代码
qt/qmake/project.cpp
116 if(!qmake_test_functions) {
117 qmake_test_functions = new QMap;
118 qmake_test_functions->insert("requires", T_REQUIRES);
119 qmake_test_functions->insert("greaterThan", T_GREATERTHAN);
120 qmake_test_functions->insert("lessThan", T_LESSTHAN);
121 qmake_test_functions->insert("equals", T_EQUALS);
122 qmake_test_functions->insert("isEqual", T_EQUALS);