在链接库时为linux和windows创造条件

时间:2010-05-06 09:07:27

标签: cmake

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 个答案:

答案 0 :(得分:5)

由于WIN32是CMake的一个基本组成部分,我猜这里的内容比你提到的更多。

您是在干净地检查代码,还是只是在Linux上复制整个目录?如果你有从Windows版本缓存的所有CMake构建文件,也许(只是可能!)有些东西在那里偷偷摸摸并在Linux上“检测”自己为WIN32?

你确定它是那条线而不是导致链接到迷路Win-library的其他东西吗?也许在MESSAGE(STATUS "I am here")内尝试IF(WIN32)行只是为了确保。

您确定错误是由链接该库引起的吗?我可以在你的剧本中看到拼写错误,它应该是IF(CMAKE_COMPILER_IS_GNUCXX) - 你还有一个额外的 X 。也许你没有把自己的事情联系起来,这就是它失败的原因。