我是CMAKE的初学者.下面是一个简单的cmake文件,它在mingw环境windows中运行良好.问题显然在于CMAKE的target_link_libraries()函数,我在这里链接libwsock32.a、 在windows中,这很有效,我得到了结果.

然而,正如预期的那样,在Linux中,/usr/bin/ld将寻找Linux操作系统上没有的-lwsock32.

我的问题是:如何指导CMAKE避免在Linux操作系统中链接wsock32库???

任何帮助都将不胜感激.

我的简单CMake文件:

 PROJECT(biourl)
 set (${PROJECT_NAME}_headers ./BioSocketAddress.h  ./BioSocketBase.h ./BioSocketBuffer.h ./BioSocketCommon.h  ./BioSocketListener.h  ./BioSocketPrivate.h  ./BioSocketStream.h ./BioUrl.h BioDatabase.h )

set (${PROJECT_NAME}_sources BioSocketAddress.C  BioSocketBase.C  BioSocketCommon.C BioSocketStream.C  BioUrl.C BioDatabase.C )

add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources} )

# linkers
#find_library(ws NAMES wsock32 PATHS ${PROJECT_SOURCE_DIR} NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH)

target_link_libraries(${PROJECT_NAME} bioutils wsock32)

install (TARGETS ${PROJECT_NAME}
       RUNTIME DESTINATION bin
       LIBRARY DESTINATION lib
       ARCHIVE DESTINATION lib/archive )

推荐答案

使用

if (WIN32)
    #do something
endif (WIN32)

if (UNIX)
    #do something
endif (UNIX)

if (MSVC)
    #do something
endif (MSVC)

或 similar

see CMake 使用ful Variables and CMake Checking Platf或m

Linux相关问答推荐

C++ kill()使Linux崩溃到登录屏幕

如何在不使用LD_LIBRARY_PATH或RPATH的情况下运行链接到共享库的二进制文件?

在Linux中随机化txt文件但保证不重复行

为什么 `std::this_thread::yield()` 比 `std::this_thread::sleep_for(0s)` 慢 10 倍?

如何比较 2 个文件并将第二个文件的所有行打印到输出文件 awk

删除一行和它之前的一行

输出特定字符的所有列号

将文件的一部分插入到另一个文件的特定位置

你如何在 CentOS9 上使用 C++ fmt?

如何使用 sed debug调试正则表达式?

anon 对 pmap 意味着什么?

通过 VM 的 Centos - 镜像列表中没有 URL

为什么 JVM 报告的已提交内存比 linux 进程驻留集大小更多?

谁决定任何数据类型或 struct 的大小(取决于 32 位或 64 位)?

使用 Bash 查找和复制文件

事件驱动和异步有什么区别?在 epoll 和 AIO 之间?

将默认 Python 版本从 2.4 更改为 2.6

查找和基本名称不能很好地播放

如何始终以 GB 为单位获取 df linux 命令输出

如何计算一个单词在目录的所有文件中出现的次数?