yaourt repositorios repositorio puede manjaro leer instalar habilitar aurman aur antergos alternativa agregar c++ build cmake

c++ - repositorios - ¿Cómo creo correctamente las dependencias entre los objetivos en CMake?



repositorio yaourt (2)

Desde CMake 2.8.11 puedes usar target_include_directories . Simplemente agregue esta función a su proyecto DEPENDENCIA y complete los directorios de inclusión que desea ver en el proyecto principal. CMake se encargará del resto.

PROYECTO, CMakeLists.txt:

cmake_minimum_required (VERSION 2.8.11) project (Project) include_directories (Project) add_subdirectory (Dependency) add_executable (Project main.cpp) target_link_libraries (Project Dependency)

DEPENDENCIA, CMakeLists.txt

project (Dependency) add_library (Dependency SomethingToCompile.cpp) target_include_directories (Dependency PUBLIC include)

Estoy tratando de usar CMake para configurar algunas dependencias simples entre un proyecto de C ++ y las bibliotecas que utiliza.

La configuración es la siguiente

  • Proyecto
    • Dependencia

El proyecto en sí contiene archivos de origen que incluyen encabezados de Dependency y, cuando se crea el ejecutable, debe vincularse con la biblioteca estática de la Dependency .

Hasta ahora puedo hacer que esto funcione, pero tengo que especificar los directorios de inclusión de Dependency en el archivo CMakeLists.txt para el Project manualmente. Quiero que esto se saque automáticamente, y he explorado la opción de usar el find_package() para hacerlo con éxito limitado y hacer las cosas mucho más complicadas.

Todo lo que quiero hacer es tener Dependency construida antes del Project y tener un enlace del Project contra la biblioteca y tener sus directorios de inclusión. ¿Hay una manera concisa simple de lograr esto?

Mis archivos actuales de CMake:

Project , archivo CMakeLists.txt :

cmake_minimum_required (VERSION 2.6) project (Project) include_directories ("${PROJECT_SOURCE_DIR}/Project") add_subdirectory (Dependency) add_executable (Project main.cpp) target_link_libraries (Project Dependency) add_dependencies(Project Dependency)

Dependency , archivo CMakeLists.txt :

project(Dependency) add_library(Dependency SomethingToCompile.cpp) target_link_libraries(Dependency)


No está exactamente claro qué quiere hacer, y por qué Project y Depency se deben construir por separado.

Mi primer comentario en tu ejemplo sería

  1. En PROYECTO, CMakeLists.txt

    • Eliminar add_dependencies (Dependencia del proyecto) No es necesario especificar la dependencia, target_link_libraries () ya lo hace.
  2. En DEPENDENCIA, CMakeLists.txt

    • Eliminar proyecto (Dependencia) Construye una biblioteca, entonces ¿por qué tener un proyecto propio?
    • Eliminar target_link_libraries (Dependencia) porque no hace nada