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.h

    Deswegen 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?





  • 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/include
    

    Also 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


Anmelden zum Antworten