descarga - install cmake macos
¿Cómo le indico a CMake que busque las bibliotecas instaladas por MacPorts? (4)
Estoy tratando de construir parte de nuestro software, que fue diseñado para ejecutarse únicamente en Linux, en MacOS X. Estamos usando CMake y yo instalamos MacPorts para poder obtener fácilmente CMake junto con algunas de las bibliotecas de terceros de las que dependemos .
Ahora el problema es que CMake no parece buscar bibliotecas de MacPorts de forma predeterminada, por lo que varios de nuestros objetivos están deshabilitados, ya que no encuentra las dependencias que se encuentran en / opt / local .
¿Cómo puedo instruir a CMake para que también busque los includes y las bibliotecas de MacPorts?
Agregué un archivo de cadena de herramientas para " Darwin " que agrega las rutas necesarias de inclusión y biblioteca. Esperaba algo un poco más automático, pero al menos resuelve el problema.
darwin.cmake :
SET(CMAKE_SYSTEM_NAME Darwin)
# Add MacPorts
INCLUDE_DIRECTORIES(/opt/local/include)
LINK_DIRECTORIES(/opt/local/lib)
Agregue / opt / local / lib, y cualquier otra ruta de instalación probable, al conjunto de rutas buscadas por cmake en su archivo CMakeLists.txt:
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /opt/local/lib)
Esto agrega / opt / local / lib al conjunto de rutas en las que cmake busca bibliotecas. Esta técnica CMAKE_LIBRARY_PATH afectará a todos los comandos find_library
después de establecer la variable.
Para un enfoque más quirúrgico, biblioteca por biblioteca, modifique los comandos individuales de find_library:
find_library(Foo foo
PATHS /opt/local/lib)
Tenga en cuenta que esto no codifica / opt / local / lib como el único lugar para buscar la biblioteca. Por el contrario, simplemente agrega / opt / local / lib al conjunto de ubicaciones en las que buscar la biblioteca. A menudo termino agregando muchos de esos caminos, cubriendo las ubicaciones observadas en todas las máquinas que conozco. Consulte la documentación de find_library para obtener más variaciones sobre este tema.
Es posible que también desee cambiar CMAKE_INCLUDE_PATH , que afecta el comportamiento de los find_file()
y find_path()
.
CMake debe respetar la variable de entorno DYLD_LIBRARY_PATH
, que es equivalente a la LD_LIBRARY_PATH
entorno LD_LIBRARY_PATH
en Linux. Su DYLD_LIBRARY_PATH
necesita tener la ruta adecuada para encontrar las bibliotecas instaladas por MacPorts.
El comentario de "NO codificar duro " de Per @ Nerdling sobre la solución aceptada, aquí hay una propuesta para detectar la ruta del prefijo 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