# 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条答案
按热度按时间j8yoct9x1#
将
/opt/local/lib
和任何其他可能的安装路径添加到cmake在CMakeLists.txt
文件中搜索的路径集中:这会将/opt/local/lib附加到cmake搜索库的路径集。在设置变量后,
CMAKE_LIBRARY_PATH
技术将影响所有find_library
命令。对于更精确的逐个库的方法,请修改各个find_library命令:
注意,这并不是***将
/opt/local/lib
硬编码为查找库的唯一位置。相反,它只是将/opt/local/lib
附加到搜索库的位置集合中。我经常最终添加许多这样的路径,覆盖了我所知道的所有机器上观察到的位置。有关此主题的更多变体,请参见find_library
documentation。您可能还希望更改
CMAKE_INCLUDE_PATH
,这会影响find_file()
和find_path()
命令的行为。jfgube3f2#
我为“* 达尔文 *”添加了一个工具链文件,它添加了必要的包含和库路径。我希望有更自动一点的东西,但至少它解决了这个问题。
rn0zuynd3#
CMake需要考虑
DYLD_LIBRARY_PATH
环境变量,它相当于Linux上的LD_LIBRARY_PATH
环境变量。您的DYLD_LIBRARY_PATH
需要有正确的路径来查找MacPorts安装的库。lrl1mhuk4#
根据@Nerdling对已接受解决方案的 “不要硬编码” 评论,这里有一个检测MacPorts前缀路径的建议。
lnlaulya5#
安装带有MacPorts的
cmake
和pkgconfig
。使用pkgconfig来查找库的CMake构建文件将使用MacPorts安装的pkgconfig,当然它将具有MacPorts安装的库的正确搜索路径。
假设CMake编译文件使用FindPkgConfig模块。例如,我在一个项目中有一个
FindLibuv.cmake
模块,它是这样开始的。