视窗 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 条件。

非常感谢您的任何建议,

请您参考如下方法:

WIN32事情是 CMake 的一个基本部分,我想这比你提到的要多。

您是对代码进行彻底检查,还是只是在 Linux 上复制整个目录?如果您从 Windows 构建中缓存了所有 CMake 构建文件,也许(只是可能!)有什么东西潜入其中并在 Linux 上“检测”为 WIN32?

您确定是那条线而不是其他导致链接到流浪 Win-library 的东西吗?也许试试 MESSAGE(STATUS "I am here")线内IF(WIN32)只想确认一下。

您确定错误是由链接该库引起的吗?我可以看到你的脚本中有一个错字,应该是 IF(CMAKE_COMPILER_IS_GNUCXX) - 你有一个额外的 X 在那里。或许你并没有将你所是的东西联系起来,这就是它失败的原因。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!