2010-02-05 4 views

Antwort

70

Nach dem CMake documentation:

target_link_libraries(<target> [lib1 [lib2 [...]]] [[debug|optimized|general] <lib>] ...) 

A "debug", "optimiert" oder "allgemein" Schlüsselwort gibt an, dass die Bibliothek folgenden ist es sofort verwendet werden, um nur für die Konfiguration entsprechenden Aufbau.

So sollen Sie in der Lage sein, dies zu tun:

add_executable(MyEXE ${SOURCES}) 

target_link_libraries(MyEXE debug 3PDebugLib) 
target_link_libraries(MyEXE optimized 3PReleaseLib) 
+12

Ich tue dies die ganze Zeit, noch kompakter in einer Zeile: target_link_libraries (MyEXE Debug 3PDebugLib 3PReleaseLib optimiert) –

+8

Was passiert, wenn der Name der Bibliothek ist die gleiche, aber Sie wollen Visual Studio für sie auf einen anderen Weg suchen ? Ich möchte mylib.lib verlinken, aber ich habe zwei Versionen davon kompiliert. eine unter /path/Debug/mylib.lib und eine weitere unter /path/Release/mylib.lib (wie es bei einigen Bibliotheken oft der Fall ist). Was machst du dann? – Jubei

+1

@Jubei Definieren Sie 2 Variablen. Eine für jede Bibliothek. – Qsiris

4

Irgendwie ist die Antwort von @ Mike Willekes bekam CMake Verknüpfung in dem gleichen Ziel sowohl Release und Debug- für mich :(

ich habe nur diese Arbeit, indem beide Konfigurationen in einer Zeile einstellen, wie in a related question von @sakra vorgeschlagen - und dabei für jede Bibliothek, die zu verknüpfe benötigt:

target_link_libraries (app 
    debug ${Boost_FILESYSTEM_LIBRARY_DEBUG} 
    optimized ${Boost_FILESYSTEM_LIBRARY_RELEASE}) 

target_link_libraries (app 
    debug ${Boost_LOG_LIBRARY_DEBUG} 
    optimized ${Boost_LOG_LIBRARY_RELEASE}) 

target_link_libraries (app 
    debug ${Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG} 
    optimized ${Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE}) 

# ... 
+0

Ah sind debuggen, ist es das, was mit mir geschieht! Wir möchten nur eine bestimmte Bibliothek im Veröffentlichungsmodus verknüpfen, sodass Ihre Methode nicht funktioniert hat. Am Ende war ich um es durch so etwas wie die folgenden verwenden: 'if (CMAKE_BUILD_TYPE STREQUAL "Release") \t target_link_libraries ($ {ARG_NAME} \t \t \t $ {LIB_TCMALLOC} \t \t) \t endif()' –

+0

Der Nachteil, @SteveLorimer, ist, dass in Multi-Konfigurations-Generatoren - wie für Visual Studio - dies nicht so funktionieren würde, wie es in Generate-Zeit getan wird. – Tarc

+0

nicht sicher, ich verstehe? Wir verlinken tcmalloc nicht in Debug-Builds. Wir verlinken tcmalloc in Release-Builds. Das heißt, es gibt keine Debug-Version von tcmalloc, daher führt die Auflistung unter optimized nur dazu, dass es auch in Debug-Builds verlinkt wird. –