CMake : Teil des Pfades entfernen
-
Hoi.
Wie lässt sich in einem cmake-Script Folgenes bewerkstelligen?"Include/MyLib/MyLib.hpp" soll zu "MyLib/MyLib.hpp" werden.
Danke und Grüße,
Ethon
-
Noch eine Frage:
Ich wollte ein Find-Script für libffi schreiben, die Headerfiles werden aber leider an besonders blöden Positionen installiert, die auch noch je nach Distro varieren ...
[ethon@Fleckstation usr]$ find . -name ffi.h
./local/lib/libffi-3.0.9rc9/include/ffi.hDeswegen scheitert folgendes leider am Finden des Include-Ordners:
# Look for the header file. Find_Path(LIBFFI_INCLUDE_DIR NAMES ffi.h) Mark_As_Advanced(LIBFFI_INCLUDE_DIR) # Look for the library. Find_Library(LIBFFI_LIBRARY NAMES ffi ) Mark_As_Advanced(LIBFFI_LIBRARY) # handle the QUIETLY and REQUIRED arguments and set LIBFFI_FOUND to TRUE # if all listed variables are TRUE Include(FindPackageHandleStandardArgs) Find_Package_Handle_Standard_Args(libffi DEFAULT_MSG LIBFFI_LIBRARY LIBFFI_INCLUDE_DIR) If(LIBFFI_FOUND) SET(LIBFFI_LIBRARIES ${LIBFFI_LIBRARY}) SET(LIBFFI_INCLUDE_DIRS ${LIBFFI_INCLUDE_DIR}) Endif(LIBFFI_FOUND)Ich habe leider nichts gefunden wie sich find_path recursiv verwenden lassen würde ... Lösungen?
-
Du kannst pkg-config verwenden:
http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries#Piggybacking_on_pkg-config
Oder gleich LibFindMacros:
http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries#Using_LibFindMacros
-
Ich weiß leider auch nicht wie ich mit pkg-config an den Pfad von ffi.h komme .

Zu meiner ersten Frage kennst du auch keine Lösung?
-
pkg-config auf der Shell liefert dir:
$ pkg-config --cflags libffi -I/usr/lib/libffi-3.0.11/includeAlso genau das, was du braucht. CMake hat ein Modul, das pkg-config für dich aufruft und dir den Pfad zurück gibt. Den kannst du dann als HINT für find_path verwenden. Das sieht dann so aus:
(Steht auch in meinem ersten Link, unter Writing find modules, das Beispiel beachten)find_package(PkgConfig) pkg_check_modules(PC_LIBFFI QUIET libffi) # Look for the header file. Find_Path(LIBFFI_INCLUDE_DIR NAMES ffi.h HINTS ${PC_LIBFFI_INCLUDE_DIRS}) Mark_As_Advanced(LIBFFI_INCLUDE_DIR) # Look for the library. Find_Library(LIBFFI_LIBRARY NAMES ffi ) Mark_As_Advanced(LIBFFI_LIBRARY) # handle the QUIETLY and REQUIRED arguments and set LIBFFI_FOUND to TRUE # if all listed variables are TRUE Include(FindPackageHandleStandardArgs) Find_Package_Handle_Standard_Args(libffi DEFAULT_MSG LIBFFI_LIBRARY LIBFFI_INCLUDE_DIR) If(LIBFFI_FOUND) SET(LIBFFI_LIBRARIES ${LIBFFI_LIBRARY}) SET(LIBFFI_INCLUDE_DIRS ${LIBFFI_INCLUDE_DIR}) Endif(LIBFFI_FOUND)
-
Leider liefert mir pkg-config ...
[ethon@Fleckstation Paper]$ pkg-config --cflags libffi
Package libffi was not found in the pkg-config search path.
Perhaps you should add the directory containing `libffi.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libffi' found