Pregunta

Estoy tratando de construir algunos de nuestro software, que fue diseñado para funcionar únicamente en Linux, en MacOS X. Estamos utilizando CMake y yo instalado DarwinPorts por lo que puede conseguir con facilidad CMake junto con algunas de las bibliotecas de terceros que dependemos.

Ahora el problema es que no aparece CMake para buscar bibliotecas de MacPorts por defecto para varios de nuestros objetivos son discapacitados, ya que no encuentra las dependencias que están todos en / opt / local .

¿Cómo puedo instruir a CMake busca también incluye bibliotecas y de MacPorts?

¿Fue útil?

Solución 2

He añadido un archivo de conjunto de herramientas para " Darwin ", que incluye la suma necesaria y rutas de bibliotecas. Me esperaba algo un poco más automático, pero al menos se soluciona el problema.

darwin.cmake

SET(CMAKE_SYSTEM_NAME Darwin)

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

Otros consejos

Añadir / opt / local / lib, y cualquier otra probable rutas de instalación, para el conjunto de caminos buscado por cmake en su archivo CMakeLists.txt:

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

Esto añade / opt / local / lib en el conjunto de caminos en el que las búsquedas cmake para las bibliotecas. Este CMAKE_LIBRARY_PATH técnica afectará a todos los comandos después de find_library establecer la variable.

Para una más quirúrgico, biblioteca-por-biblioteca enfoque, modifique los comandos find_library individuales:

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

Tenga en cuenta que esto hace no hardcode / opt / local / lib como el único lugar para buscar la biblioteca. Más bien, simplemente añade / opt / local / lib al conjunto de lugares en los que la búsqueda de la biblioteca. A menudo terminan añadiendo muchos de estos caminos, que cubra los lugares observados en todas las máquinas que conozco. Vea la find_library documentación para más variaciones sobre este tema .

También puede ser que desee cambiar CMAKE_INCLUDE_PATH , que afecta el comportamiento de los comandos find_file() y find_path().

CMake tiene que respetar la variable de entorno DYLD_LIBRARY_PATH, que es el equivalente a la variable de entorno LD_LIBRARY_PATH en Linux. Su DYLD_LIBRARY_PATH necesita tener el camino correcto para encontrar las bibliotecas instaladas por MacPorts.

Por @ de Nerdling "NO codificar" Comentario sobre la solución aceptada, he aquí una propuesta para detectar la trayectoria DarwinPorts prefijo.

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top