создание условий для Linux и окон при соединении библиотек

Windows VC ++ Linux 2008 года gcc 4.4.3

У меня есть следующая проблема. Когда я компилирую на окнах, мне нужна 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.

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

7
задан ant2009 6 May 2010 в 09:07
поделиться

1 ответ

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

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

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

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

5
ответ дан 7 December 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: