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

Dav*_*olm 35 macos macports cmake

我正在尝试构建我们的一些软件,这些软件专门在Linux上运行,在MacOS X上运行.我们正在使用CMake并安装了MacPorts,因此我可以轻松地将CMake与我们依赖的一些第三方库一起使用.

现在的问题是,CMake默认情况下似乎没有从MacPorts查找库,因此我们的几个目标都被禁用,因为它无法找到所有在/ opt/local中的依赖项.

我如何指示CMake也从MacPorts中寻找包含和库?

Chr*_*uns 33

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

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /opt/local/lib)
Run Code Online (Sandbox Code Playgroud)

这会将/ opt/local/lib附加到cmake搜索库的路径集.设置变量后,此CMAKE_LIBRARY_PATH技术将影响所有find_library命令.

对于更加手术,逐库的方法,修改单个find_library命令:

find_library(Foo foo
    PATHS /opt/local/lib)
Run Code Online (Sandbox Code Playgroud)

请注意,这不是硬编码/ opt/local/lib作为查找库的唯一位置.相反,它只是将/ opt/local/lib附加到搜索库的位置集.我经常最终添加许多这样的路径,覆盖我所知道的所有机器上观察到的位置.有关此主题的更多变体,请参阅find_library文档.

您可能还希望更改CMAKE_INCLUDE_PATH,这会影响find_file()find_path()命令的行为.

  • 对于稍微好一点的语法:list(APPEND CMAKE_LIBRARY_PATH/opt/local/lib) (4认同)
  • 这个答案浪费了我很多时间给我 - cmake似乎很乐意忽略这个变量(或者它可能用于完全不同的目的).只是想警告人们,因为实际的(正确的)答案是(容易混淆)较少的赞成:使用`link_directories`. (2认同)

Dav*_*olm 15

我为" Darwin " 添加了一个工具链文件,它添加了必要的包含和库路径.我希望有一些更自动的东西,但至少它解决了这个问题.

darwin.cmake:

SET(CMAKE_SYSTEM_NAME Darwin)

# Add MacPorts
INCLUDE_DIRECTORIES(/opt/local/include)
LINK_DIRECTORIES(/opt/local/lib)
Run Code Online (Sandbox Code Playgroud)

  • 不要硬编码/选择/本地.这可以是用户安装MacPorts的任何目录. (3认同)

Han*_*Gay 6

CMake需要尊重DYLD_LIBRARY_PATH环境变量,这相当于LD_LIBRARY_PATHLinux 上的环境变量.您DYLD_LIBRARY_PATH需要有正确的路径来查找MacPorts安装的库.