Foo adlı bir kitaplığa bağlanmak istediğinizi varsayıyorum , dosya adı genellikle bağlantı foo.dll
veya 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_LIB
kullanı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/lib64
ve yolları PATH
.
Kitaplığınızın yerini zaten biliyorsunuz. CMAKE_PREFIX_PATH
CMake'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 GLBall
gibi hedefinize bağlamak için kullanırsınız .
target_link_libraries(GLBall PRIVATE "${FOO_LIB}")
Sen eklemek gerekir PRIVATE
, PUBLIC
ya da INTERFACE
hedef, 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ğı PRIVATE
veya PUBLIC
CKağı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_path
benzeri kullanın find_library
ve bir başlık dosyası arayın. Daha sonra, ile target_include_directories
benzer 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_library
ve find_path
tarafından find_package
.
link_directories
Kendi belgelerinde bile kullanımı tavsiye edilmez.find_library
Asıl sorudaki başarısız aramayı çözmenin veya @ Andre'nin çözümünü kullanmanın burada daha iyi olacağını düşünüyorum .