2011-08-11 17 views
5

Aktualnie przesyłam projekt zbudowany z qmake do CMake.CMake + Qt: zdefiniuj katalog wyjściowy moc/ui

W wersji z qmake w pliku .pri, nie było

MOC_DIR = .moc/$${PLATFORM_NAME} 

że wolno produkować MOC tymczasowe pliki w danym katalogu, zachowując czyste źródła. Jak zrobić to samo z CMake?

Uwaga: przy CMake używam pakietu FindQt4.cmake i polecenia QT4_WRAP_CPP().

+5

Generalnie używa się kompilacji poza drzewem, aby zachować czyste źródła. Zobacz http://www.vtk.org/Wiki/CMake_FAQ#Out-of-source_build_trees – baysmith

Odpowiedz

4

Jak mówi baysmith, jeśli Twoim celem jest utrzymanie katalogu źródłowego w czystości, prawdziwym rozwiązaniem jest użycie funkcji kompilacji CMake'a o nazwie "out-of-source". Jeśli jesteś w systemie Windows, ustaw "Gdzie kompilować pliki binarne" w nowym katalogu, innym niż katalog "Gdzie jest kod źródłowy". Jeśli jesteś na systemie Unix, to idzie tak:

cd <source directory> 
mkdir build 
cd build 
cmake .. 
make 

Uruchamiając CMake na innym katalogu, wszystkie pliki kompilacji wejdzie do tego katalogu, a źródła pozostaną czyste. (Uwaga: katalog kompilacji nie musi znajdować się w katalogu źródłowym.) Aby uzyskać więcej informacji, zobacz CMake wiki.)

Jeśli "poza źródłem" nie działa, to udało mi się znaleźć inna opcja. Na podstawie tego, co mogę powiedzieć z pliku Qt4Macros.cmake zainstalowanego z moim CMake 2.8, nie jest on dostępny jako parametr konfiguracyjny. Poniżej znajduje się odpowiednia linia:

SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC}) 

Rozwiązaniem jest zmiana wszystkich swoich MOC obejmują dyrektyw określających podfolder, który chcesz zbudować do.

#include "moc/mainwindow.moc" 

Po utworzeniu katalogu moc w moim katalogu budowy, nie było problemów z budynku, a mój plik MOC była w nowym katalogu.