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.
большое спасибо за любые предложения,
Поскольку WIN32
является такой фундаментальной частью CMake, я бы предположил, что здесь есть нечто большее, чем то, что вы упомянули.
Делаете ли вы чистую проверку кода или просто копируете весь каталог в Linux? Если у вас все файлы сборки CMake кэшированы из сборки Windows, может быть (просто может быть!) что-то пробралось туда и "определяет" себя как WIN32 в Linux?
Вы уверены, что именно эта строка, а не что-то другое вызывает ссылку на блуждающую Win-библиотеку? Может быть, попробуйте MESSAGE(STATUS "Я здесь")
строку внутри IF(WIN32)
, чтобы убедиться.
Вы уверены, что ошибка вызвана подключением этой библиотеки? Я вижу опечатку в вашем скрипте, это должно быть IF(CMAKE_COMPILER_IS_GNUCXX)
- у вас там лишний X. Возможно, вы связываете не то, что считаете нужным, и поэтому происходит сбой.