создание условий для linux и windows при компоновке библиотек - PullRequest
7 голосов
/ 06 мая 2010

Windows VC ++ 2008 linux gcc 4.4.3

У меня следующая проблема. Когда я компилирую в Windows, мне нужна библиотека ws2_32. Однако, когда я компилирую на Linux, мне не нужно связывать это.

Мой 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)

Я безуспешно пытался скомпилировать под Linux. Используя вышеуказанные условия. Тем не менее, он всегда пытается связать ws2_32, и я получаю ошибку компиляции. Я думаю, что условия не работают, так как они всегда проходят через условие WIN32.

большое спасибо за любые предложения,

1 Ответ

5 голосов
/ 06 мая 2010

Поскольку вещь WIN32 является такой фундаментальной частью CMake, я предполагаю, что в этом есть нечто большее, чем то, что вы упоминаете.

Вы делаете чистую проверку своего кода или просто копируете целый каталог в Linux? Если у вас есть все файлы сборки CMake, кэшированные из сборки Windows, может быть (может быть, просто!) Что-то проникло туда и «определяет» себя как WIN32 в Linux?

Вы уверены, что именно эта строка, а не что-то еще, вызывает ссылку на беспризорную Win-библиотеку? Может быть, попробуйте MESSAGE(STATUS "I am here") строку в IF(WIN32) просто чтобы убедиться.

Вы уверены, что ошибка вызвана связыванием этой библиотеки? Я могу видеть опечатку в вашем скрипте, это должно быть IF(CMAKE_COMPILER_IS_GNUCXX) - у вас есть дополнительный X там. Возможно, вы не связываете себя с тем, что вы есть, и поэтому оно терпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...