2016-07-08 15 views
6

Pracuję nad projektem C++, który zostanie zamknięty na większym.Skompiluj jeden plik w projekcie CMake?

Widziałem to na większym projekcie (jest to aplikacja Qt i jest generowane z qmake) Jestem w stanie skompilować pojedynczy plik z linii poleceń Linuksa, po prostu wprowadzając względną ścieżkę do określonego pliku jako argument do zrobienia.

Z drugiej strony używam CMake do mojego własnego projektu. Kiedy modyfikuję jakiś kod dla jednostki kompilacji i muszę zmodyfikować jego plik nagłówkowy, muszę długo czekać na skompilowanie jego zależności, a następnie jego własnego pliku źródłowego. Ale są pewne sytuacje, w których wolałbym sprawdzić, czy kod źródłowy w pliku * .cc jest kompilowany bez błędów.

Czy istnieje sposób na wygenerowanie pliku Makefile z CMake tak, jak robi to qmake? Przejście na qmake nie jest już opcją.

+0

Spróbuj 'make help' na aktualna CUpewnij generowane makefile. Jestem prawie pewien, że wylistuje, jak zbudować pojedynczy plik obiektowy. – John

Odpowiedz

3

Nie, CMake nie oferuje wbudowanej obsługi kompilacji pojedynczych plików.

Musisz dodać cel dla każdego pliku obiektów, być może przez funkcję iterującą po wszystkich plikach katalogu.

3

Not out of the box. CMake nie ujawnia tych "wewnętrznych" reguł pliku makefile w głównym pliku makefile.

Możesz to zrobić tylko, jeśli zastanowisz się, jakiego rodzaju struktura plików używa CMake. Możesz np. do kompilowania pojedyncze .obj plików za pomocą CUpewnij generowane makefile zadzwonić

make -f CMakeFiles/myProg.dir/build.make CMakeFiles/myProg.dir/main.cc.obj 

kiedy masz coś podobnego

cmake_minimum_required(VERSION 3.1) 

project(myProg CXX) 

file(WRITE "main.cc" "int main()\n{\nreturn 0;\n}") 
add_executable(myProg main.cc) 
6

nie trzeba dodać kolejne niestandardowe cele do skryptów CUpewnij jako Makefile generowane przez CMake już zawierają .o target dla każdego pliku .cc. Na przykład. jeśli masz plik źródłowy o nazwie mySourceFile.cc, w katalogu kompilacji będzie plik Makefile, który definiuje cel o nazwie <Some Path>/mySourceFile.cc.o. Jeśli podłączysz katalog cd do katalogu budowania, możesz użyć pliku Makefile, który definiuje ten cel, a następnie cd do katalogu Makefile i skompilować go.

E.g. Przypuszczam, że komenda ack-grep mySourceFile.cc.o drukuje coś takiego:

foo/bar/Makefile 
119:x/y/z/mySourceFile.o: x/y/z/mySourceFile.cc.o 
123:x/y/z/mySourceFile.cc.o: 
124: # recipe for building target 

Następnie można zbudować mySourceFile.cc.o wykonując:

cd foo/bar && make x/y/z/mySourceFile.cc.o 
Powiązane problemy