我在这里有一个相当特殊的设置,我对CMake的了解不足以找出问题所在。
我在Ubuntu 12.04上。
我从apt-add-repository ppa:ubuntu-sdk-team/ppa
安装了Qt5,从apt-add-repository ppa:kalakris/cmake
(https://launchpad.net/~kalakris/+archive/ubuntu/cmake)安装了CMake 2.8.11.2。
这是完整的,最小的测试用例:
daniel@omni-travis-test:~/projects/qtcmaketest$ ls
blubb.cpp CMakeLists.txt
daniel@omni-travis-test:~/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)
daniel@omni-travis-test:~/projects/qtcmaketest$ cat blubb.cpp
#include <QWidget>
#include <QApplication>
int main (int argc, char * argv[])
{
QApplication app (argc, argv);
QWidget foo;
foo.show ();
}
daniel@omni-travis-test:~/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成功时缺少include目录?
我正在使用本指南: 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 :(得分:1)
我很确定问题出在Qt的版本中。我认为这个早期的Qt 5版本不包含CMake脚本来单独使用find_package
。
对于较新的Qt 5的新发行版,它按预期工作。看起来您必须添加特殊版本检查以包含或排除我提到的作为解决方法的行。
其他信息:由于Ubuntu 12.04 真的旧,我决定不支持它作为我项目的目标构建平台。 我最初的原因是特拉维斯CI使用12.04,但由于它太麻烦了,我将保持我的travis构建,直到它们升级到14.04,这似乎是一个很大的问题。 Travis tweeted给我,2014年12月12日:
Travis CI:我们正在努力。大部分都在那里,但基础设施存在严重问题。谢谢你的耐心等待。
答案 1 :(得分: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
希望这也能解决你的问题。