c++ Projekt mit CMake strukturieren

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

c++ Projekt mit CMake strukturieren

Beitrag von MoMo » Do Okt 11, 2018 2:07 pm

Hallo,

ich möchte gerne ein Projekt strukturieren, ich benutze CMake. Ich möchte meine ausführbare Datei gerne in den bin Ordner packen, jedoch bleibt dieser immer leer.
im root verzeichnis gibt es einen src Folder der die cpp dateien enthält und eine build.sh die alles baut.
build.sh:

Code: Alles auswählen

#!/usr/bin/env bash

ROOTDIR=`pwd`

    BUILDFOLDER=$ROOTDIR/build
    BINFOLDER=$ROOTDIR/bin

    mkdir -p $BUILDFOLDER $BINFOLDER 

    cd $BUILDFOLDER

    cmake -DCMAKE_BUILD_TYPE=Release $ROOTDIR || exit 1

    cmake --build . 
die cmakelists.txt im Rootfolder sieht wie folgt aus:

Code: Alles auswählen

project (test)

cmake_minimum_required (VERSION 3.0)

set(INSTALL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bin/")

add_subdirectory(src)

und die cmake im src-Folder

Code: Alles auswählen

add_executable(${PROJECT_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp")

install(TARGETS ${PROJECT_NAME} DESTINATION ${INSTALL_DIR})
Das problem ist jetzt: Es wird keine ausführbare Datei im bin angelegt, jedoch erscheint auch keine Fehlermeldung in der Konsole, kann mir da jemand weiter helfen?

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: c++ Projekt mit CMake strukturieren

Beitrag von nufan » Do Okt 11, 2018 6:32 pm

MoMo hat geschrieben:
Do Okt 11, 2018 2:07 pm

Code: Alles auswählen

cmake --build .
Deine Datei wird angelegt, allerdings nur in build/src/. Damit die Datei im bin/-Verzeichnis landet, musst du im letzten Schritt das "install" Target verwenden.

Das machst du mit "cmake" folgendermaßen:

Code: Alles auswählen

cmake --build . --target install
Alternativ kannst du "make" auch direkt verwenden:

Code: Alles auswählen

make install

MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Re: c++ Projekt mit CMake strukturieren

Beitrag von MoMo » Mi Okt 17, 2018 2:48 pm

Danke für die Antwort, hat geklappt!!!

jetz hab ich mal eine Lib eingebunden

mit set(CMAKE_PREFIX_PATH "...") hab ich den Pfad zur config.cmake angegeben
danach habe ich

Code: Alles auswählen

find_package(PCL 1.7 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
und in der CMakeLists.txt in im src verzeichis habe ich nach add_executable noch

Code: Alles auswählen

target_link_libraries (${PROJECT_NAME} ${PCL_LIBRARIES})
eingegeben.

alles wird kompiliert und auch eine executable erstellt. jedoch wird beim ausführen des programms gesagt, er finde die .so Datei der Lib nicht. Diese liegt auch nicht in dem Ordner, in dem die config.cmake liegt. daher hab ich bei prefix_path noch den Pfad zur .so angegeben, bringt jedoch auch nichts.
Als ich das noch nicht separiert hatte, dass die .cpp Dateien in src liegen, sondern alles im Rootverzeichnis hat das Programm ausgeführt.

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: c++ Projekt mit CMake strukturieren

Beitrag von nufan » Mi Okt 17, 2018 3:03 pm

Es gibt mehrere Möglichkeiten das Problem zu lösen:
https://www.proggen.org/forum/viewtopic ... =20#p37050

MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Re: c++ Projekt mit CMake strukturieren

Beitrag von MoMo » Mi Okt 17, 2018 3:48 pm

mit

Code: Alles auswählen

SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,PFAD_ZUR_.SO") 
gelöst

Antworten