Seite 1 von 1

c++ Projekt mit CMake strukturieren

Verfasst: Do Okt 11, 2018 2:07 pm
von MoMo
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?

Re: c++ Projekt mit CMake strukturieren

Verfasst: Do Okt 11, 2018 6:32 pm
von nufan
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

Re: c++ Projekt mit CMake strukturieren

Verfasst: Mi Okt 17, 2018 2:48 pm
von MoMo
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.

Re: c++ Projekt mit CMake strukturieren

Verfasst: Mi Okt 17, 2018 3:03 pm
von nufan
Es gibt mehrere Möglichkeiten das Problem zu lösen:
https://www.proggen.org/forum/viewtopic ... =20#p37050

Re: c++ Projekt mit CMake strukturieren

Verfasst: Mi Okt 17, 2018 3:48 pm
von MoMo
mit

Code: Alles auswählen

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