2012-07-02 20 views
8

oluşturun. lib.c altında tanımlanan fonksiyonların beyanlarını almak üzere ben lib.h dosyasını dahil client.c İçinde
cmake üç dosyaları var bir paylaşılan nesne

Birisi bana bu kadar kaynak alanı olduğunu kullanıyor olmalıdır kesin CMakeLists dosyası söyleyebilir Cmake'nin geçici dosyaları ve binary'ler ve kütüphaneler (inanıyorum pencereler in.) ayrı yapı ve ikili dizinlerde üretilen ile düzenli değil? CKağıt varsayılan olarak ayrı yapı dizinleri üzerine inşa

cevap

4

(Ben bu örneği test etmedi):

PROJECT(myproject) 
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 

SET(mylibSRCS lib.c) 
SET(myprogSRCS client.c) 

ADD_LIBRARY(mylib ${mylibSRCS}) 
ADD_EXECUTABLE(myprog ${myprogSRCS}) 

TARGET_LINK_LIBRARIES(myprog mylib) 

Sen yapın:

mkdir build 
cd build 
cmake .. 
make 

Herşey yapı altında olacaktır.

+0

bu kabuk komutları çalıştırarak olmadan yeni dizinde daima yapı yapmanın bir yolu var mı:

çözüm şöyle "ORTAK" seçeneğini eksik? Ben googled ama herhangi bir yararlı bağlantı bulamadık. –

+0

http://stackoverflow.com/questions/11143062/getting-cmake-to-build-out-of-source-without-wrapping-scripts/11144109#11144109 – Fraser

+0

Evet. Yapabilirsin & cd inşa et & cmake .. & make'. Deponuzu süper temizlemeniz gerekiyorsa, derleme dizinini silin. Bu, oluşturulan malzemeleri orijinal kaynaklarınızdan ayırır. Aşağıdaki @chryss tarafından belirtildiği gibi, – Stewart

11

Bu çözüm, bir .so dosyası oluşturmayacak, ancak cmake ile daha fazla dahil edilmek üzere bir cmake eşdeğeri oluşturmayacaktır. Birlikte bir çözüm arıyorum
Buna eşdeğer sağlayacaktır:

g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o 

zamanında dlopen dinamik yüklenebilir bir plugin_lib.so üretecektir hangi.

ADD_LIBRARY(mylib SHARED ${mylibSRCS}) 
+0

Kabul edilen yanıt güncellenmelidir –