2013-03-22 10 views
16

Projemi paylaşılan kütüphaneme bağlamak için CMake kullanmak istiyorum. Kütüphane sadece bir avuç proje arasında paylaşılır ve oldukça küçüktür, bu yüzden bağlantı kurulmadan önce onu inşa etmeyi çok isterim. Her seferinde inşa etmek, güncel bir derlenmiş versiyonu devam ettirmekten daha iyi bir fikir gibi görünmektedir, çünkü projeyle birlikte değiştirmem on. Ayrı, çünkü bir sonraki projede neredeyse kesinlikle ihtiyaç duyacağım şeyler içeriyor.Projenin dışındaki bir kütüphaneye statik olarak bağlanmak için CMake'i kullanma

CMake'i bunu nasıl yapılandırabilirim?

find_package(Boost REQUIRED COMPONENTS unit_test_framework) 

include_directories(${BaumWelch_SOURCE_DIR}/../../grzesLib/src 
        ${BaumWelch_SOURCE_DIR}/src 
        ${Boost_INCLUDE_DIRS}) 

if(CMAKE_COMPILER_IS_GNUCXX) 
    add_definitions(-g -std=c++11 -Wall -Werror -Wextra -pedantic -Wuninitialized) 
endif() 


# Create the unit tests executable 
add_executable(
baumwelchtests stateindextest.cpp baumiterationtest.cpp baumwelchtest.cpp sampleparameters.cpp sdetest.cpp 
# Key includes for setting up Boost.Test 
testrunner.cpp 
# Just for handy reference 
exampletests.cpp 
) 

# Link the libraries 
target_link_libraries(baumwelchtests ${Boost_LIBRARIES} baumwelchlib grzeslib) 

ama besbelli derleme başarısız olur:

ilgili proje için Bulunduğum CMakeLists.txt şöyle Sen kütüphane kurmaya ister ziyade istiyorum sözü

/usr/bin/ld: cannot find -lgrzeslib 
+0

Liba'ya .a eklerseniz işe yarar mı? – drescherjm

+0

@drescherjm, bu kütüphane potansiyel olarak bu noktada bile derlenmiş değil, ayrıca ben ikili nerede olurdu herhangi bir yerde belirtmek yok, bu yüzden libname yardımcı olmayacaktır emin değilim. – Grzenio

cevap

26

önceden derlenmiş bir sürümünü kullanın. Kitaplığın bir CMakeList varsa, add_subdirectory(path/to/the/library/source/directory) kullanarak eklemelisiniz. Daha sonra projenizin bir alt projesine dönüşecek ve hedeflerinin isimlerini normal olarak CMakeList'inizde kullanabilirsiniz. Komut add_ alt dizin denirken, bu disk üzerinde keyfi bir dizin olabilir

Not; Ana projenin kaynak dir'inin bir alt dizini olmak zorunda değildir. Alt dizin değilse, bunun için açıkça bir ikili dizin belirtmeniz gerekir. Örnek: göreli yol olarak verilirse

add_subdirectory(/path/to/the/library/source/directory subproject/grzeslib) 

ikinci bağımsız, CMAKE_CURRENT_BINARY_DIR göre yorumlanır.

+2

Bunu denedim, ancak şu hatayı alıyorum: 'add_subdirectory bir ikili dizin verilmiyor ama verilen kaynak dizini"/home/ga1009/PhD/cpp/grzesLib/src "alt dizini değil "/home/ga1009/Doktora/cpp/pmi/ABM". Ağaç dışı bir kaynak belirtilirken ikili dizinin açıkça belirtilmesi gerekir. '. Bununla ilgili ne yapmalıyım? – Grzenio

+0

@Grzenio Bilgiyi cevaba ekledim. – Angew

+0

Aynı hata @Grzenio alıyorum ... herhangi bir keyfi dizini koymama izin vermiyor. –