2014-12-01 79 views
1

我在这里有一个相当特殊的设置,我对CMake没有足够的了解,找出错误。在Ubuntu上使用CMake编译Qt5代码12.04

我在Ubuntu 12.04上。 我从apt-add-repository ppa:ubuntu-sdk-team/ppa安装Qt5,从apt-add-repository ppa:kalakris/cmakehttps://launchpad.net/~kalakris/+archive/ubuntu/cmake)安装CMake 2.8.11.2。

下面是完整的,最小的测试用例:

[email protected]:~/projects/qtcmaketest$ ls 
blubb.cpp CMakeLists.txt 

[email protected]:~/projects/qtcmaketest$ cat CMakeLists.txt 

cmake_minimum_required(VERSION 2.8.11) 
project (qtcmaketest) 
find_package (Qt5Widgets REQUIRED) 
add_executable(qtcmaketest blubb.cpp) 
target_link_libraries (qtcmaketest Qt5::Widgets) 

[email protected]:~/projects/qtcmaketest$ cat blubb.cpp 
#include <QWidget> 
#include <QApplication> 

int main (int argc, char * argv[]) 
{ 
    QApplication app (argc, argv); 
    QWidget foo; 
    foo.show(); 
} 
[email protected]:~/projects/qtcmaketest$ cmake . && make 
-- The C compiler identification is GNU 4.8.1 
-- The CXX compiler identification is GNU 4.8.1 
-- Check for working C compiler: /usr/bin/cc 
-- Check for working C compiler: /usr/bin/cc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/c++ 
-- Check for working CXX compiler: /usr/bin/c++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/daniel/projects/qtcmaketest 
Scanning dependencies of target qtcmaketest 
[100%] Building CXX object CMakeFiles/qtcmaketest.dir/blubb.cpp.o 
/home/daniel/projects/qtcmaketest/blubb.cpp:1:19: fatal error: QWidget: No such file or directory 
#include <QWidget> 
       ^
compilation terminated. 
make[2]: *** [CMakeFiles/qtcmaketest.dir/blubb.cpp.o] Error 1 
make[1]: *** [CMakeFiles/qtcmaketest.dir/all] Error 2 
make: *** [all] Error 2 

为什么包括目录中缺少时find_package是成功的?

我用这个指南: http://qt-project.org/doc/qt-5/cmake-manual.html

我只注意到,继从章节中的指令时,“使用Qt 5 CMake的年纪比2.8.9”,汇编作品。我加了以下几行:

include_directories(${Qt5Widgets_INCLUDE_DIRS}) 
add_definitions(${Qt5Widgets_DEFINITIONS}) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") 

我知道,这应该没有这些线路的工作,因为它运行的Ubuntu 14.04盒(默认情况下包括适当的Qt和CMake的版本)。我不希望得到这个问题的解决方案,但我可能需要一些关于在哪里寻找问题的指针。

+0

最小的测试用例很重要。它告诉我们问题是否在你的代码中。如果blubb.cpp包含QWidget,发布的CMakeLists.txt会发生什么? – steveire 2014-12-01 19:22:52

+0

感谢您的反馈@steveire,增加了一个最小的测试案例和一些信息。 – 2014-12-02 04:34:02

+0

尝试'make VERBOSE = 1'而不是'make'。这是什么版本的Qt 5? – steveire 2014-12-02 08:34:19

回答

1

我很确定问题在于Qt的版本。我认为这个早期的Qt 5版本没有包含CMake脚本,只能单独使用find_package

在较新的Qt 5发行版中,它按预期工作。看起来你必须添加特殊的版本检查来包含或排除我提到的解决方案。

附加信息:对于Ubuntu 12.04是真的老了,我决定不支持它作为我的项目目标构建平台。 我最初的原因是Travis CI使用12.04,但由于它很麻烦,我会保留我的travis版本,直到升级到14.04,这似乎是一个相当大的问题。 特拉维斯tweeted对我来说,在十二月,12日2014:

特拉维斯CI:我们正在做这个工作。大部分都在那里,但是基础设施存在一个关键问题。谢谢你的耐心。

0

在这里,我最近有同样的问题,找到了以下解决方案来安装更新QT5版本使cmake的正常进行:

sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty universe" 
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty main" 
sudo add-apt-repository --yes ppa:kalakris/cmake 
sudo apt-get update -qq 
sudo apt-get install cmake 
sudo apt-get install qdbus qmlscene qt5-default qt5-qmake qtbase5-dev-tools qtchooser qtdeclarative5-dev xbitmaps xterm libqt5svg5-dev qttools5-dev qtscript5-dev qtdeclarative5-folderlistmodel-plugin qtdeclarative5-controls-plugin -y 

在我结束了使用以下.travis.yml文件,以获得最终事情进展:

https://github.com/hzdr/qutselect/blob/master/.travis.yml

希望也可以解决你的问题。