2010-08-01 19 views
12

Bir yürütülebilir dosyayı standart bir konumda bulunan bir kitaplıkla ilişkilendirmek için, CmakeLists.txt dosyasında aşağıdakileri yapabilirsiniz:Cmake ile bir kütüphane nasıl bulunur?

create_executable(generate_mesh generate_mesh.cpp) 
target_link_libraries(generate_mesh OpenMeshCore) 

Bu, bağlantılı olarak bağlanan kütüphanenin

/usr/local/lib/libOpenMeshCore.dylib 

Ancak, bu durumda kütüphane

/usr/local/lib/OpenMesh/libOpenMeshCore.dylib 

altındadır. target_link_libraries'in bir sibdirectory yerleştirilmiş bir kütüphaneye gerçekten bağlanmasını nasıl belirleyebilirim? Kütüphanenin bir standandard konumdaki bir alt dizininde olduğunu belirten target_link_libraries için bazı yararlı seçenekler vardır.

target_link_libraries(generate_mesh OpenMesh/OpenMeshCore) 

Bu mümkün değilse, belirli kütüphane dosyası için alt dizinleri de dahil olmak üzere /usr/local/lib'i tekrar tekrar aramak için find_library'i kullanmanın bir yolu var mı?

cevap

21

find_library'a farklı dizinler ekleyebilirsiniz. Bu kütüphane çağrısını kullanmak için cmake -DFOO_PREFIX=/some/path ... numaralı telefondan cmake.

find_library(CPPUNIT_LIBRARY_DEBUG NAMES cppunit cppunit_dll cppunitd cppunitd_dll 
      PATHS ${FOO_PREFIX}/lib 
        /usr/lib 
        /usr/lib64 
        /usr/local/lib 
        /usr/local/lib64 
      PATH_SUFFIXES debug) 

find_library(CPPUNIT_LIBRARY_RELEASE NAMES cppunit cppunit_dll 
      PATHS ${FOO_PREFIX}/lib 
        /usr/lib 
        /usr/lib64 
        /usr/local/lib 
        /usr/local/lib64 
      PATH_SUFFIXES release) 

if(CPPUNIT_LIBRARY_DEBUG AND NOT CPPUNIT_LIBRARY_RELEASE) 
    set(CPPUNIT_LIBRARY_RELEASE ${CPPUNIT_LIBRARY_DEBUG}) 
endif(CPPUNIT_LIBRARY_DEBUG AND NOT CPPUNIT_LIBRARY_RELEASE) 

set(CPPUNIT_LIBRARY debug  ${CPPUNIT_LIBRARY_DEBUG} 
        optimized ${CPPUNIT_LIBRARY_RELEASE}) 

# ... 
target_link_libraries(foo ${CPPUNIT_LIBRARY}) 
+0

Bana bir terapi çalışması yaptım teşekkürler! – alexr