Mam mały projekt z plikiem Makefile, który próbuję przekonwertować na CMake, głównie po to, aby uzyskać doświadczenie z CMake. Dla celów tego przykładu projekt zawiera plik źródłowy (C++, chociaż nie sądzę, że jest to szczególnie istotny język) i statyczny plik biblioteki, który skopiowałem z innego miejsca. Załóżmy, ze względu na argument, że kod źródłowy do biblioteki jest niedostępny; Mam tylko plik .a i odpowiedni nagłówek.Jak powiedzieć CMake, aby połączyć w statycznej bibliotece w katalogu źródłowym?
My handmade Makefile zawiera ten build zasadę:
main: main.o libbingitup.a
g++ -o main main.o libbingitup.a
które działa prawidłowo. Jak mogę powiedzieć CMake, aby to powtórzył? Nie dosłownie to dokładnie makefile, oczywiście, ale coś, co zawiera równoważne polecenie łączenia. Próbowałem oczywiste ale naiwnych sposoby, jak
add_executable(main main.cpp libbingitup.a)
lub
add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)
jak również różnych rzeczy z link_directories(.)
lub add_library(bingitup STATIC IMPORTED)
itd, ale nic tak daleko, że wyniki w udanym wiązaniem. Co powinienem robić?
szczegóły Version: CWprowadä 2.8.7 na Linux (Kubuntu 12.04) z GCC 4.6.3
wielki, który działa, dzięki! Wydaje się trochę hackish, aby wyraźnie umieścić tutaj pełną ścieżkę, ale myślę, że to tylko sposób CMake ... –
Zgadzam się, że wydaje się to przesadą tutaj, ale jawnie określając pełną ścieżkę wypłaca dywidendy, jeśli masz wiele różnych wersji tej samej zainstalowanej biblioteki. – Fraser
Niesamowite, jak zwykle! W moim przypadku rozwiązano problem bibliotek w zależności od innej zbudowanej biblioteki dynamicznej, która zależała od biblioteki statycznej: biblioteki zależne również próbowały połączyć się z tą biblioteką statyczną. – Antonio