2011-02-05 12 views
24

Próbuję użyć CMake, aby ustawić kilka prostych zależności między projektem C++ i bibliotek, które używa.CMake, jak poprawnie tworzyć zależności między celami

Ustawiona się następująco

  • Projekt
    • Zależność

Sam projekt zawiera pliki źródłowe, które zawierają nagłówki z uzależnieniem i gdy plik wykonywalny jest zbudowany musi być połączone z biblioteką statyczną Dependency.

Do tej pory mogę to uruchomić, ale muszę ręcznie określić katalogi zależności Dependency w pliku CMakeLists for Project. Chcę, aby to zostało automatycznie wyciągnięte i zbadałem opcję użycia polecenia find_package(), aby osiągnąć ten cel z ograniczonym sukcesem i uczynić rzeczy znacznie bardziej skomplikowanymi.

Wszystko, co chcę zrobić, to mieć zależność zbudowaną przed projektem i mieć link do projektu w stosunku do biblioteki i mieć katalogi z zawartością. Czy istnieje prosty, zwięzły sposób osiągnięcia tego?

Moje obecne pliki CWprowadä:

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) 

uzależnienia CMakeLists.txt

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

Zamówienie: http://stackoverflow.com/questions/10004134/cmake-add-dependency-not-in-subdirectory –

Odpowiedz

1

To nie jest do końca jasne, co chcesz zrobić, a dlaczego projekt i depresja muszą być budowane osobno.

mój pierwszy chociaż na przykład byłoby

  1. W PROJEKCIE, CMakeLists.txt

    • Usuń add_dependencies (projekt zależność) Nie ma potrzeby, aby określić zależność, target_link_libraries() już robi to.
  2. W zależności, CMakeLists.txt

    • Usuń projektu (Dependency) Buduje bibliotekę, więc dlaczego mają własny projekt?
    • Usunąć target_link_libraries (zależność) Bo to nic nie robi
+6

odpowiedzieć na pytanie . Zależność może być projektem dla biblioteki współdzielonej, która jest dołączona jako moduł podrzędny git. Biblioteka współdzielona ma działać również bez zewnętrznego projektu. – Arne

16

Od CMake 2.8.11 można użyć target_include_directories. Po prostu dodaj tę funkcję DEPENDENCY i wypełnij katalogi włączeń, które chcesz zobaczyć w głównym projekcie. CMake zajmie się resztą.

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

uzależnienia CMakeLists.txt

project (Dependency) 
add_library (Dependency SomethingToCompile.cpp) 
target_include_directories (Dependency PUBLIC include) 
Powiązane problemy