2014-09-23 4 views
0

Я пытаюсь выполнить проект Qt (Qt 4.8.6) с CMake, но у меня есть некоторые проблемы с компоновщиком, и я немного потерян.проблемы с компоновщиками с qt4 и CMake

Вот что я получаю, когда я делать "делать" в моем проекте:

chasselas:build tfaux$ make VERBOSE=1 
"/Applications/CMake 2.8-12.app/Contents/bin/cmake" -H/Users/tfaux/Documents/workspace/tempQt4 -B/Users/tfaux/Documents/workspace/tempQt4/build --check-build-system CMakeFiles/Makefile.cmake 0 
"/Applications/CMake 2.8-12.app/Contents/bin/cmake" -E cmake_progress_start /Users/tfaux/Documents/workspace/tempQt4/build/CMakeFiles /Users/tfaux/Documents/workspace/tempQt4/build/CMakeFiles/progress.marks 
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/Makefile2 all 
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/addressbook.dir/build.make CMakeFiles/addressbook.dir/depend 
cd /Users/tfaux/Documents/workspace/tempQt4/build && "/Applications/CMake 2.8-12.app/Contents/bin/cmake" -E cmake_depends "Unix Makefiles" /Users/tfaux/Documents/workspace/tempQt4 /Users/tfaux/Documents/workspace/tempQt4 /Users/tfaux/Documents/workspace/tempQt4/build /Users/tfaux/Documents/workspace/tempQt4/build /Users/tfaux/Documents/workspace/tempQt4/build/CMakeFiles/addressbook.dir/DependInfo.cmake --color= 
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/addressbook.dir/build.make CMakeFiles/addressbook.dir/build 
Linking CXX executable addressbook 
"/Applications/CMake 2.8-12.app/Contents/bin/cmake" -E cmake_link_script CMakeFiles/addressbook.dir/link.txt --verbose=1 
/usr/bin/c++ -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/addressbook.dir/main.cpp.o CMakeFiles/addressbook.dir/addressbook.cpp.o -o addressbook -F/usr/local/Cellar/qt/4.8.6/lib -framework QtOpenGL -framework QtGui -framework QtCore 
Undefined symbols for architecture x86_64: 
    "AddressBook::staticMetaObject", referenced from: 
     AddressBook::tr(char const*, char const*) in addressbook.cpp.o 
    "vtable for AddressBook", referenced from: 
     AddressBook::AddressBook(QWidget*) in addressbook.cpp.o 
    NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make[2]: *** [addressbook] Error 1 
make[1]: *** [CMakeFiles/addressbook.dir/all] Error 2 
make: *** [all] Error 2 

Вот это addressbook.h: http://qt-project.org/doc/qt-4.8/tutorials-addressbook-fr-part1-addressbook-h.html

Вот это adressebook.cpp: http://qt-project.org/doc/qt-4.8/tutorials-addressbook-fr-part1-addressbook-cpp.html

Вот CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 
LIST(APPEND CMAKE_PREFIX_PATH "/usr/local/Cellar/qt/4.8.6") 

#Test Cmake file for Qt applications 
SET(PROJECT_NAME addressbook) 
PROJECT(${PROJECT_NAME}) 
Find_PACKAGE(Qt4 REQUIRED) 
SET(QT_USE_MAIN true) 

#Setting the sources of the project 
SET(PROJECT_SOURCES 
main.cpp 
addressbook.cpp 
) 

SET(PROJECTS_HEADERS 
main.h 
addressbook.h 
) 

#Traitement du moc Qt 
QT4_WRAP_CPP(PROJECT_HEADERS_MOC ${PROJECT_HEADERS}) 

#inclusions 
INCLUDE_DIRECTORIES(${TULIP_INCLUDE_DIR} ${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) 
INCLUDE(${QT_USE_FILE}) 
ADD_DEFINITIONS(${QT_DEFINITIONS}) 

#creation de l'executable et liaison des librairies 
ADD_EXECUTABLE(addressbook ${PROJECT_SOURCES} ${PROJECT_HEADERS_MOC}) 
TARGET_LINK_LIBRARIES(addressbook ${QT_LIBRARIES} ${QT_NETWORK_LIBRARY}) 
INSTALL(TARGETS addressbook DESTINATION bin) 

Любая помощь приветствуется, спасибо!

ответ

2
  1. Используйте команды нижнего регистра в вашем коде cmake. Это гораздо более читаемо.

  2. У вас есть опечатка. Вы устанавливаете переменную PROJECTS_HEADERS, но вы передаете PROJECT_HEADERS в qt4_wrap_cpp. Предпочитаете использовать редактор, который делает это очевидным, выделяя идентичные строки при выборе. Фиксирование опечатки исправляет вашу ошибку.

  3. Используйте CMAKE_AUTOMOC вместо qt4_wrap_cpp. http://www.cmake.org/cmake/help/v3.0/manual/cmake-qt.7.html Он доступен с CMake 2.8.6.

+0

Спасибо, он работал с Auto_moc. – Thomas

Смежные вопросы