Ein Kollege hat ein Projekt, das ein handgeschriebenes Makefile mit fest codierten Bibliothekspfaden verwendet. So zum Beispiel sind die CXXFLAGS
und die LDFLAGS
gesetzt wie folgt aus:Erledigen Sie die Arbeit von find_package manuell, indem Sie die Pfade in der Befehlszeile angeben
-I/home/personA/libraries/eigen-3.2.7
-I/home/personA/libraries/boost_1_60_0
-I/home/personB/hdf5-1.8.17/include
-L/home/personA/libraries/boost_1_60_0/stage/lib/
-L/home/personB/hdf5-1.8.17/lib
Niemand direkte administrative Rechte auf dieser Maschine hat, so dass nur die Debian-Pakete mit diesen Bibliotheken Installation wird beinhalten den Administrator Gezeter um sie zu installieren. Und selbst wenn, könnte es eine andere Abhängigkeit geben, die nicht in den Repositories ist.
In meiner CMake-Datei, ich habe dies:
find_package(HDF5 REQUIRED COMPONENTS C CXX)
include_directories(${HDF5_INCLUDE_DIRS})
find_package(Boost REQUIRED COMPONENTS filesystem system program_options)
find_package(Eigen3 REQUIRED)
include_directories(SYSTEM ${EIGEN3_INCLUDE_DIR})
find_package(OpenMP)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
Auf meiner Fedora-Workstation funktioniert dies gut. Auf meiner Ubuntu 14.04 virtuellen Maschine funktioniert es auch, es baut auch auf Travis CI auf. Dieses Projekt läuft jedoch auf unserem Rechencluster und die Abhängigkeiten sind an wirklich merkwürdigen Stellen.
So würde ich gerne cmake
auf eine Weise aufrufen, die ihm sagt, dass ich bereits kenne, dass Bibliotheksflaggen es braucht und nicht einmal nach einer FindEigen3.cmake
Datei suchen (die nicht da ist).
Gibt es eine Möglichkeit, die find_package
zu überschreiben und nur die Pfade manuell anzugeben?
Das Problem ist, dass auf dem Zielsystem nicht einmal eine 'FindEigen3.cmake' Datei existiert. Daher habe ich jetzt einen anderen Ansatz gewählt, der dem Ihren ähnlich ist und nicht erfordert, dass diese Datei installiert wird. –