2014-12-01 110 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

希望也可以解決你的問題。