Próbuję użyć cmake (w Linuksie z GNU make i g ++) do zbudowania projektu z dwoma podkatalogami: MyLib i MyApp. MyLib zawiera źródło statycznej biblioteki; MyApp musi połączyć się z tą biblioteką. Próbuję budować na Linuksie z wygenerowanymi plikami makefile przy użyciu następującego CMakeLists.txt:CMAKE: Buduj bibliotekę i łącz się z nią
cmake_minimum_required (VERSION 2.6)
project (MyProj)
include_directories (MyLib)
file(GLOB MyLibSrc MyLib/*.cpp)
add_library(MyLibrary STATIC ${MyLibSrc})
file(GLOB MyAppSrc MyApp/*.cpp)
add_executable(MyApplication ${MyAppSrc})
target_link_libraries(MyApplication MyLibrary)
To "prawie" działa. Zawodzi podczas połączenia, ponieważ generuje bibliotekę libMyLibrary.a - znajduje się w katalogu głównym. Gdy dodaję:
link_directories(${MyProj_BINARY_DIR})
to nie ma znaczenia.
mam kilka (Inter-linked) pytania:
- Jaki jest najlepszy sposób, aby wymusić cmake do budowania moją bibliotekę i wykonywalnego w „katalogu pomostowym” — powiedzieć MyStage — utrzymać cele oddzielenia ze źródła?
- Jak przekonać cmake do połączenia aplikacji z biblioteką?
- Jeśli chciałem zbudować wersję debugowania i wersję release, jaki jest najlepszy sposób na rozszerzenie moich skryptów cmake, aby to zrobić —, upewniając się, że aplikacja do debugowania łączy się z biblioteką debugowania i aplikacją do wydania w stosunku do biblioteki wersji?
Jestem względną nowicjuszką do cmake. Przeczytałem, co mogę znaleźć w sieci, ale staram się zmusić bibliotekę do połączenia z moim plikiem wykonywalnym. Ten rodzaj konfiguracji, według mnie, powinien być dość powszechny. Przykład, w którym do łóżeczka byłoby bardzo pomocne, ale nie znalazłem.
widzę, jak (1) mogłaby działać - choć nie sądzę, że to miłe. Nie chcę CMakeLists.txt w moim katalogu "przemieszczania" obok mojej biblioteki, jeśli mogę pomóc. – aSteve
Uhm, nie, nie, CMakeLists.txt pozostanie w drzewie źródłowym. Ścieżka, która jest przekazywana jako argument do cmake, jest katalogiem zawierającym najwyższy poziom CMakeLists.txt. W tej konfiguracji katalog "inscenizacja" jest całkowicie pusty przed wywołaniem cmake. – kralyk