如何指导CMake的寻找通过安装MacPorts的库?(How do I instruct CMak

2019-07-19 21:55发布

我试图建立一些我们的软件,其目的是在Linux上运行完全,MacOS X上,我们正在使用的CMake和我的MacPorts安装,所以我可以很容易地与一些我们依赖于第三方库的相处的CMake 。

现在的问题是,CMake的没有出现在默认情况下,寻找图书馆从MacPorts的所以我们几个指标被禁用,因为它无法找到这些都是在/ opt /本地的依赖关系。

我怎么能指示的CMake也找包括从MacPorts的库?

Answer 1:

将/ 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命令:

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

请注意,这硬编码的/ opt / local / lib目录,以查找库的唯一地方。 相反,它只是附加的/ opt / local / lib目录到设定的在其中搜索库的位置。 我最后往往加入许多这样的路径,涵盖了所有我知道的机器中观察到的位置。 见find_library文档关于这个主题更多的变化。

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



Answer 2:

我加了一个工具链文件“ 达尔文 ”,这增加了必要的包括和库路径。 我希望的东西多一点自动化,但至少它解决了这个问题。

darwin.cmake:

SET(CMAKE_SYSTEM_NAME Darwin)

# Add MacPorts
INCLUDE_DIRECTORIES(/opt/local/include)
LINK_DIRECTORIES(/opt/local/lib)


Answer 3:

CMake的需要尊重DYLD_LIBRARY_PATH环境变量,这是相当于LD_LIBRARY_PATH在Linux环境变量。 你DYLD_LIBRARY_PATH需要有找到的MacPorts安装的存储库的正确路径。



Answer 4:

每@ Nerdling的“不硬编码”的评论接受的解决方案,这里的检测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


文章来源: How do I instruct CMake to look for libraries installed by MacPorts?