CMAKE 中的操作系统特定说明:如何? [英] OS specific instructions in CMAKE: How to?

查看:20
本文介绍了CMAKE 中的操作系统特定说明:如何?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am a beginner to CMAKE. Below is a simple cmake file which works well in mingw environment windows. The problem is clearly with target_link_libraries() function of CMAKE where I am linking libwsock32.a. In windows this works and I get the results.

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

However, as expected, in Linux, the /usr/bin/ld will look for -lwsock32 which is NOT there on the Linux OS.

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

My Problem is: How do I instruct CMAKE to avoid linking wsock32 library in Linux OS???

任何帮助将不胜感激.

我的简单 CMake 文件:

My Simple CMake file:

 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)

或类似的

参见 CMake 有用的变量CMake 检查平台

这篇关于CMAKE 中的操作系统特定说明:如何?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆