Używam cmake do zarządzania kompilacją mojego projektu i to jest mój pierwszy raz używać cmake. To narzędzie jest bardzo wygodne, ponieważ istnieje mnóstwo skryptów i funkcji, które pozwalają sprawdzić, czy wszystkie potrzebne biblioteki są zainstalowane na danym komputerze. Czasami jednak te ogólne pisma nie obejmują konkretnego przypadku lub w ogóle nie są dostępne dla danej biblioteki. Moje pytanie jest następujące:Jak sprawdzić cmake czy dany plik nagłówka jest dostępny dla projektu C++
Jaki jest właściwy styl cmake polegający na sprawdzeniu, czy dany plik nagłówkowy (hpp lub h) jest dostępny w ścieżce dołączania?
Uzasadnienie:
Większość straigforward sposobem jest prawdopodobnie używać makr CHECK_INCLUDE_FILE. Na przykład, jeśli chciałbym użyć biblioteki unittest ++, mógłbym napisać
CHECK_INCLUDE_FILE_CXX("UnitTest++.h" HAVE_UNITTESTXX)
IF(NOT HAVE_UNITTESTXX)
message(FATAL_ERROR "UnitTest++ is not found")
ENDIF()
Niestety Jeżeli to się robi w ten sposób, zmienna HAVE_UNITTESTXX są przechowywane w pamięci podręcznej. Jeśli zainstaluję bibliotekę UnitTest ++ w moim systemie, cmake będzie nadal skarży się na to, że UnitTest ++. H nie jest zainstalowany. Mogę ręcznie usunąć pamięć podręczną, ale standardowe funkcje pakietu nie wymagają tego. Mogę również zaktualizować kod tak, jak to
CHECK_INCLUDE_FILE_CXX("UnitTest++.h" HAVE_UNITTESTXX)
IF(NOT HAVE_UNITTESTXX)
UNSET(HAVE_UNITTESTXX CACHE)
message(FATAL_ERROR "UnitTest++ is not found")
ENDIF()
To rozwiązanie działa, ale nie wygląda ładnie. Chciałbym poznać sposób cmake do wykonania tego zadania.
Pozdrawiam!
Dziękuję za życzliwą odpowiedź! To podejście makro jest z pewnością znacznie czystsze, ponieważ chciałbym włączyć wiele bibliotek. – wpfnoop