2010-05-06 36 views
6

của Windows VC++ 2008 linux gcc 4.4.3làm điều kiện cho Linux và cửa sổ khi liên kết các thư viện

Tôi có vấn đề sau đây. Khi tôi biên dịch trên windows, tôi cần thư viện ws2_32. Tuy nhiên, khi tôi biên dịch trên Linux, tôi không cần phải liên kết này.

My 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) 

Tôi đã cố gắng không thành công để biên dịch dưới Linux. Sử dụng các điều kiện trên. Tuy nhiên, nó luôn luôn cố gắng liên kết ws2_32 và tôi nhận được một lỗi biên dịch. Tôi nghĩ rằng các điều kiện không hoạt động, vì nó luôn rơi qua điều kiện WIN32.

cảm ơn rất nhiều cho bất cứ đề nghị,

Trả lời

4

Kể từ khi điều WIN32 là một phần cơ bản như vậy CMake, tôi đoán rằng có nhiều đến thế này hơn những gì bạn đề cập đến.

Bạn đang thực hiện kiểm tra sạch mã của mình hay chỉ sao chép toàn bộ thư mục trên Linux? Nếu bạn có tất cả các tệp xây dựng CMake của bạn được lưu trong bộ nhớ đệm của Windows, có thể (chỉ có thể!) Một cái gì đó đã lén lút trong đó và "phát hiện" chính nó là WIN32 trên Linux?

Bạn có chắc đó là dòng đó chứ không phải cái gì khác gây ra liên kết đến thư mục Win-thư lạc không? Có thể thử một đường dây MESSAGE(STATUS "I am here") trong phạm vi IF(WIN32) chỉ để đảm bảo.

Bạn có chắc chắn lỗi xảy ra khi liên kết thư viện đó không? Tôi có thể thấy lỗi đánh máy trong tập lệnh của bạn, nó phải là IF(CMAKE_COMPILER_IS_GNUCXX) - bạn có thêm X trên đó. Có lẽ bạn không liên kết với những gì bạn đang làm, và đó là lý do tại sao nó không thành công.

+0

Có, bạn đã chính xác 100%, đó là thêm X. Cảm ơn – ant2009

Các vấn đề liên quan