Fragen zu cmake

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
The Hit-Man
Beiträge: 2222
Registriert: 21.11.2004 17:01:56
Wohnort: Menden ( Sauerland )
Kontaktdaten:

Fragen zu cmake

Beitrag von The Hit-Man » 23.01.2023 18:29:06

Ich habe mir mit cmake ein binary gebaut. Hat so weit auch alles funktioniert. Jetzt habe ich einfach mal das src Verzeichnis verschoben und wollte cmake einfach wieder bauen lassen. Da ja alle .o Dateien schon erstellt worden sind, sollte das ja nicht lange dauern. Eigentlich erstellt das cmake ja nur eine Makefile Datei. Also wenn ich den src Ordner wo anders hin verschiebe, will alles komplett neu gebaut werden. Läßt sich das irgendwie umgehen? Da ja, wie gesagt alle .o Dateien und so weiter schon gebaut worden sind.
Wer HTML postet oder gepostetes HTML quotet oder sich gepostetes oder
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.

damals windows, früher ubuntu, danach debian, heute arch-linux ;)

Benutzeravatar
SubOptimal
Beiträge: 1709
Registriert: 10.01.2005 23:25:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: bei Frankfurt

Re: Fragen zu cmake

Beitrag von SubOptimal » 15.02.2023 21:36:52

Hi The Hit-Man,

kommt darauf an welche Aktion du mit "Jetzt habe ich einfach mal das src Verzeichnis verschoben ..." durchgeführt hast.

Wenn du das Projektverzeichnis verschoben hast, z. B. /opt/tool/ nach /opt/projekte/tool/, dann wird CMake die Datei CMakeCache.txt als ungültig ansehen, du musst die generierten Dateien löschen und neu erstellen lassen.

Wenn du ein Projekt-Unterverzeichnis verschoben hast, z. B. /opt/tool/src/ nach /opt/tool/sourcen/ dann findet make die generierten Objektdateien nicht mehr.
Angenommen du hast in der CMakeLists.txt die Zeile

Code: Alles auswählen

add_executable(app src/main.cpp)
geändert in

Code: Alles auswählen

add_executable(app srcnew/main.cpp)
Dann hat ein Build beim ersten Verzeichnis die Objektdateien in

Code: Alles auswählen

build/CMakeFiles/app.dir/src
gespeichert. Ein Build im zweiten Verzeichnis legt diese aber in

Code: Alles auswählen

build/CMakeFiles/app.dir/srcnew
an. Auch wenn die Datei

Code: Alles auswählen

build/app
dann schon existiert, wird make die Objektdateien in dem Verzeichnis nicht finden und das dazugehörige Target und davon abhängige neu bauen.

Gruß
SubOptimal

Antworten