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条件下。
非常感谢任何建议,
答案 0 :(得分:5)
由于WIN32
是CMake的一个基本组成部分,我猜这里的内容比你提到的更多。
您是在干净地检查代码,还是只是在Linux上复制整个目录?如果你有从Windows版本缓存的所有CMake构建文件,也许(只是可能!)有些东西在那里偷偷摸摸并在Linux上“检测”自己为WIN32?
你确定它是那条线而不是导致链接到迷路Win-library的其他东西吗?也许在MESSAGE(STATUS "I am here")
内尝试IF(WIN32)
行只是为了确保。
您确定错误是由链接该库引起的吗?我可以在你的剧本中看到拼写错误,它应该是IF(CMAKE_COMPILER_IS_GNUCXX)
- 你还有一个额外的 X 。也许你没有把自己的事情联系起来,这就是它失败的原因。