代码之家  ›  专栏  ›  技术社区  ›  David Holm

如何指示CMake查找MacPorts安装的库?

  •  30
  • David Holm  · 技术社区  · 16 年前

    我正在尝试在MacOS X上构建我们的一些软件,这些软件是专为在Linux上运行而设计的。我们正在使用CMake,我安装了MacPorts,这样我就可以很容易地获得CMake以及我们所依赖的一些第三方库。

    .

    4 回复  |  直到 16 年前
        1
  •  35
  •   Taz8du29 Christopher Bruns    8 年前

    将/opt/local/lib和任何其他可能的安装路径添加到cmake在CMakeLists.txt文件中搜索的路径集中:

    set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /opt/local/lib)
    

    这会将/opt/local/lib追加到cmake搜索库的路径集中。这 CMAKE_LIBRARY_PATH 技术将影响所有人 find_library

    find_library(Foo foo
        PATHS /opt/local/lib)
    

    请注意,这是正确的 硬编码/opt/local/lib是查找库的唯一位置。相反,它只是将/opt/local/lib附加到要搜索库的位置集。我经常添加许多这样的路径,覆盖我所知道的所有机器上观察到的位置。见 find_library documentation 更多关于这个主题的变化。

    你也可能希望改变 CMAKE_INCLUDE_PATH find_file() find_path() 命令。

        2
  •  16
  •   David Holm    16 年前

    达尔文 “它添加了必要的include和library路径。我希望有一个更自动化的东西,但至少它解决了这个问题。

    :

    SET(CMAKE_SYSTEM_NAME Darwin)
    
    # Add MacPorts
    INCLUDE_DIRECTORIES(/opt/local/include)
    LINK_DIRECTORIES(/opt/local/lib)
    
        3
  •  6
  •   Hank Gay    16 年前

    CMake需要尊重 DYLD_LIBRARY_PATH 环境变量,它等效于 LD_LIBRARY_PATH Linux上的环境变量。你的 需要有正确的路径才能找到MacPorts安装的库。

        4
  •  3
  •   tresf    11 年前

    每@nerling's 评论一下公认的解决方案,下面是一个检测MacPorts前缀路径的建议。

    MyModule.cmake

    # Detect if the "port" command is valid on this system; if so, return full path
    EXECUTE_PROCESS(COMMAND which port RESULT_VARIABLE DETECT_MACPORTS OUTPUT_VARIABLE MACPORTS_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
    
    IF (${DETECT_MACPORTS} EQUAL 0)
        # "/opt/local/bin/port" doesn't have libs, so we get the parent directory
        GET_FILENAME_COMPONENT(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
    
        # "/opt/local/bin" doesn't have libs, so we get the parent directory
        GET_FILENAME_COMPONENT(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY)
    
        # "/opt/local" is where MacPorts lives, add `/lib` suffix and link
        LINK_DIRECTORIES(${LINK DIRECTORIES} ${MACPORTS_PREFIX}/lib)
    
        MESSAGE("WINNING!: ${MACPORTS_PREFIX}/lib")
    ENDIF()
    
    # Recommendation, also add a "brew --prefix" custom command to detect a homebrew build environment
    
        5
  •  1
  •   user7610    6 年前

    安装 cmake pkgconfig 用MacPorts。

    port install cmake pkgconfig
    

    使用pkgconfig查找libs的CMake生成文件将使用MacPorts安装的pkgconfig,当然,它将具有MacPorts安装的库的正确搜索路径。

    FindPkgConfig FindLibuv.cmake

    find_package (PkgConfig)
    pkg_check_modules (PC_Libuv QUIET libuv)
    
    推荐文章