2010-05-06 8 views
6

Windows-VC++ 2008 Linux gcc 4.4.3Herstellungsbedingungen für Linux und Windows, wenn Bibliotheken

Verknüpfung habe ich folgendes Problem. Wenn ich auf Windows kompiliere, brauche ich die Bibliothek ws2_32. Wenn ich jedoch unter Linux kompiliere, muss ich das nicht verlinken.

Mein CMakeLists.txt

INCLUDE_DIRECTORIES($CLIENT_SERVER_SOURCE_DIR/client) 
INCLUDE_DIRECTORIES($CLIENT_SERVER_SOURCE_DIR/cltsvr_ults) 

# Link the library 
LINK_DIRECTORIES($CLIENT_SERVER_DIR/client) 

# Add the executable 
ADD_EXECUTABLE(clt test_clt) 

# Link the executable to the client library 
IF(WIN32) 
    TARGET_LINK_LIBRARIES(clt client ws2_32) 
ENDIF(WIN32) 

IF(CMAKE_COMPILER_IS_GNUCXXX) 
    TARGET_LINK_LIBRARIES(clt client) 
ENDIF(CMAKE_COMPILER_IS_GNUCXXX) 

Ich habe erfolglos versucht, unter Linux zu kompilieren. Verwenden Sie die oben genannten Bedingungen. Allerdings versucht es immer die ws2_32 zu verlinken und bekomme einen Kompilierfehler. Ich denke, dass die Bedingungen nicht funktionieren, da es immer durch den WIN32-Zustand fällt.

vielen Dank für alle Vorschläge,

Antwort

4

Da die WIN32 Sache so ein wesentlicher Bestandteil von CMake ist, würde ich vermuten, dass mehr dazu gibt als das, was Sie erwähnen.

Machst du eine saubere Überprüfung deines Codes oder kopierst einfach ein ganzes Verzeichnis unter Linux? Wenn Sie alle Ihre CMake-Build-Dateien aus dem Windows-Build zwischengespeichert haben, ist vielleicht (nur vielleicht!) Etwas hineingeschlichen und "entdeckt" sich selbst als WIN32 unter Linux?

Sind Sie sicher, dass es diese Zeile und nicht etwas anderes ist, das die Verbindung zu der streunenden Win-Bibliothek verursacht? Vielleicht versuchen Sie eine MESSAGE(STATUS "I am here") Linie innerhalb der IF(WIN32) nur um sicher zu gehen.

Sind Sie sicher, dass der Fehler durch das Verknüpfen dieser Bibliothek verursacht wird? Ich kann einen Tippfehler in Ihrem Skript sehen, es sollte IF(CMAKE_COMPILER_IS_GNUCXX) sein - Sie haben ein extra X auf dort. Vielleicht verbindest du dich nicht mit dem, was du bist, und deshalb versagt es.

+0

Ja, Sie waren 100% richtig, es war das Extra X. Danke – ant2009

Verwandte Themen