Как правильно создать зависимости между целями в CMake? - PullRequest
30 голосов
/ 05 февраля 2011

Я пытаюсь использовать CMake, чтобы установить некоторые простые зависимости между проектом C ++ и библиотеками, которые он использует.

Настройка выглядит следующим образом

  • Проект
    • Зависимость

Сам проект содержит исходные файлы с заголовками из Dependency, и когда исполняемый файл создается, его необходимо связать со статической библиотекой Dependency.

Пока я могу заставить это работать, но я должен указать каталоги включения Dependency в файле CMakeLists.txt для Project вручную. Я хочу, чтобы это было удалено автоматически, и я исследовал возможность использования команды find_package(), чтобы сделать это с ограниченным успехом и усложнить ситуацию.

Все, что я хочу сделать, - это построить Dependency до Project, иметь Project ссылку на библиотеку и иметь включенные каталоги. Есть ли простой лаконичный способ достижения этого?

Мои текущие файлы CMake:

Project, файл 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, файл CMakeLists.txt:

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

Ответы [ 2 ]

21 голосов
/ 09 сентября 2013

С CMake 2.8.11 вы можете использовать target_include_directories. Просто добавьте в свой проект DEPENDENCY эту функцию и заполните каталоги, которые вы хотите видеть в основном проекте. CMake позаботится обо всем остальном.

PROJECT, 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)

ЗАВИСИМОСТЬ, CMakeLists.txt

project (Dependency)
add_library (Dependency SomethingToCompile.cpp)
target_include_directories (Dependency PUBLIC include)
0 голосов
/ 05 февраля 2011

Не совсем понятно, что вы хотите сделать, и почему Project и Depency должны быть построены отдельно.

Мой первый пример на вашем примере будет

  1. В PROJECT CMakeLists.txt

    • Удалить add_dependencies (Project Dependency) Нет необходимости указывать зависимость, target_link_libraries () уже делает это.
  2. В ЗАВИСИМОСТИ CMakeLists.txt

    • Удалить проект (Зависимость) Создает библиотеку, так зачем иметь собственный проект?
    • Удаляет target_link_libraries (Зависимость), потому что он ничего не делает
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...