2016-05-31 14 views
0

Was und wie mit CMake-Dateien in so einem weg zu tun wäre, würde nicht die Abhängigkeit Reihenfolge kümmern müssen? (Siehe meine vorherige Frage zum Thema Strange error: undefined reference to `class::class()').Interdependancy von C++ - Bibliotheken mit CMake

Zum Beispiel, wenn Sie lib A abhängig von lib B haben, die durch ihre wiederum abhängig von lib C ist würde kodieren

add_library({MY_LIB} A B C) 

Wie man nicht gezwungen, tun, um die Reihenfolge zu folgen? Ich habe

nur
target_link_libraries({MY_LIB} {MY_LIB}) 

In der nahen Vergangenheit Aber das ist nicht mehr für mich arbeiten .... Ich weiß nicht, warum (???). Dieses Problem ist ziemlich irritierend, da ich eine große Anzahl voneinander abhängiger Bibliotheken habe ...

Irgendein Vorschlag bitte (benutze cmake 3.5.2, gcc Version 4.8.4 unter Ubuntu 4.8.4-2ubuntu1 ~ 14.04.3)?

+0

Können Sie die CMakeLists.txt mit einschließen, für die 'target_link_libraries ({MY_LIB} {MY_LIB})' fehlschlägt? – buratino

Antwort

2

Ein add_library Befehl zum Erstellen jeder Bibliothek und dann die Abhängigkeiten mit target_link_libraries sollte ausreichen.

In Ihrem Fall hätten Sie z.B.

add_library(A ${sources_for_A}) 
add_library(B ${sources_for_B}) 
add_library(C ${sources_for_C}) 

target_link_libraries(A B) # A depends on B 
target_link_libraries(B C) # B depends on C 

# Executable using the libraries 
add_executable(program ${sources_for_program}) 
target_link_libraries(program A) # Program uses library A (and B and C indirectly) 

Es sollte keine Rolle, ob die Bibliotheken STATIC oder SHARED sind.

+0

target_link_library oder target_link_libraries? Was ist der Unterschied bitte? – Courier

+0

Aber hier kümmern Sie sich um die Reihenfolge, die ich vermeiden muss ... – Courier

+0

Erhalte die Fehlermeldung 'Unbekannter CMake-Befehl" target_link_library "' – Courier

Verwandte Themen