2015-04-17 19 views
5

Uygulamamın, bir kütüphaneye (libmy_so.so) bağlanması, dolayısıyla da statik bir kütüphaneyle (libmy_static_lib.a) oluşturulmasını istiyorum. BenNeden cmake_link_libraries statik libs içerir?

target_link_libraries(my_exe my_so) 

yaptığınızda cmake inşa hattında libmy_static_lib.a kattığını derleme yaparken görüyorum. Bu istediğim bir şey değil ve neden gerekli olduğunu anlamıyorum. Bunun etrafında bir yolu var mı? LINK_PRIVATE hiçbir fark yaratmıyor gibi görünüyor.

CMake 2.8.9 kullanıyorum. CMake documentation for target_link_libraries itibaren

cevap

5

:

target_link_libraries(<target> [item1 [item2 [...]]] 
         [[debug|optimized|general] <item>] ...) 

[...] Kütüphane bağımlılıkları Bu imza ile varsayılan olarak geçişli edilir. Bu hedef başka bir hedefe bağlandığında, bu hedefe bağlanan kütüphaneler de diğer hedef için bağlantı hattında görünecektir.

çözüm elle Geçişli davranışını belirlemenizi sağlar target_link_libraries imzasını kullanmaktır:

# we explicitly state that the static lib should not propagate 
# transitively to targets depending on my_so 
target_link_libraries(my_so PRIVATE my_static_lib) 

# nothing has to change for the exe 
target_link_libraries(my_exe my_so) 
+0

ÖZEL CMake 2.8 için var görünmemektedir ve LINK_PRIVATE benim için çalışmaz. Yani, LINK_PRiVATE – Rolle

+1

@ Rolle Right olmadan aynı davranışı alıyorum, bu en az CMake 2.8.11 gerektiren bir özelliktir. Daha önceki sürümlerde, hedef özelliklerle uğraşmak zorunda kalacağımdan korkuyorum. Mümkünse CMake versiyonunuzu yükseltmenizi şiddetle tavsiye ederim. – ComicSansMS

+0

'LINK_PRIVATE', CMake 2.8.9 ile düzgün çalışmalıdır. – steveire

İlgili konular