Foo adlı bir kitaplığa bağlanmak istediğinizi varsayıyorum , dosya adı genellikle bağlantı foo.dllveya libfoo.so.
1. Kitaplığı bulun Kitaplığı
bulmanız gerekir. Kitaplığınıza giden yolu bilseniz bile bu iyi bir fikirdir. Kitaplık kaybolursa veya yeni bir ad alırsa CMake hata verecektir. Bu, hatayı erken tespit etmeye ve kullanıcıya (kendiniz de olabilir) bir soruna neyin neden olduğunu netleştirmeye yardımcı olur.
Bir kütüphane bulmak için foo ve yolu saklamak FOO_LIBkullanım
find_library(FOO_LIB foo)
CMake, gerçek dosya adının nasıl olduğunu kendisi anlayacaktır. Bu gibi olağan yerlerde denetler /usr/lib, /usr/lib64ve yolları PATH.
Kitaplığınızın yerini zaten biliyorsunuz. CMAKE_PREFIX_PATHCMake'i aradığınızda ekleyin , ardından CMake kitaplığınızı geçirilen yollarda da arayacaktır.
Bazen ipuçları veya yol son ekleri eklemeniz gerekir, ayrıntılar için belgelere bakın:
https://cmake.org/cmake/help/latest/command/find_library.html
2. Kitaplığı
bağlayın 1.'den itibaren tam kitaplık adına sahipsiniz FOO_LIB. Bunu, kitaplığı olduğu GLBallgibi hedefinize bağlamak için kullanırsınız .
target_link_libraries(GLBall PRIVATE "${FOO_LIB}")
Sen eklemek gerekir PRIVATE, PUBLICya da INTERFACEhedef, krş sonra belgeler:
https://cmake.org/cmake/help/latest/command/target_link_libraries.html
Eğer bu görünürlük belirticilerinin tane ekleyin yoksa, o da böyle davranacağı PRIVATEveya PUBLICCKağıt sürümü ve politikaları sette bağlı.
3. İçerir ekleyin (Bu adım zorunlu olmayabilir.)
Ayrıca başlık dosyalarını da dahil etmek istiyorsanız, find_pathbenzeri kullanın find_libraryve bir başlık dosyası arayın. Daha sonra, ile target_include_directoriesbenzer içeren içerme dizinini ekleyin target_link_libraries.
Belgeler:
https://cmake.org/cmake/help/latest/command/find_path.html
ve
https://cmake.org/cmake/help/latest/command/target_include_directories.html
Harici yazılımlar için mevcut ise, yerini alabilir find_libraryve find_pathtarafından find_package.
link_directoriesKendi belgelerinde bile kullanımı tavsiye edilmez.find_libraryAsıl sorudaki başarısız aramayı çözmenin veya @ Andre'nin çözümünü kullanmanın burada daha iyi olacağını düşünüyorum .