如何在CMake中添加Windows库?

时间:2013-07-25 00:01:31

标签: visual-studio-2010 visual-studio cmake

我想将ws2_32.lib包含到我的应用程序中,但CMake将-l添加到项目属性中。

...
add_executable(Executive ${exec_src})
target_link_libraries(Executive ws2_32)

这就是我的CMakeLists.txt文件的样子,但是当我检查“输入”下的VS2010链接器属性页面时,它列出了-lws2_32.lib。为什么要添加-l?我如何删除它,因为一旦我手动将其更改为阅读ws2_32.lib,项目就能够正确链接。

我尝试了以下内容: find_library(WIN_C ws2_32)但结果为NOTFOUND

2 个答案:

答案 0 :(得分:2)

自从我之前的回答以来,我自己找到了一个更好的方法。

在您的CMAKE输出开始时,您是否看到过这样的内容?:

The C compiler identification is unknown
The CXX compiler identification is unknown

如果是这样,似乎CMake没有正确地确定你的编译器 - 因此没有正确解决如何传递链接器参数。

在我看来,它似乎被我安装的工具套件搞糊涂了。我有各种版本的VS2010快速工具,以及安装Visual Studio shell的TFS团队资源管理器。看起来CMake看到了devenv.exe的存在,并假设我有一个完整的视觉工作室。

您可以通过指定CMAKE_MAKE_PROGRAM变量来解决此问题 - 在命令行中使用-D CMAKE_MAKE_PROGRAM或在GUI中勾选高级复选框并查找条目。我需要将它从C:/PROGRA〜2/MICROS〜1.0 /Common7 / INTER / devenv.com更改为C:/PROGRA〜2/MICROS〜1.0 /Common7 / INTER / VCExpress.exe - 注意正斜杠! / p>

一旦我这样做了,我就不再需要做find_library了。

答案 1 :(得分:1)

我使用Visual Studio 2010生成器和CMake 2.8.11.2遇到了同样的问题。在我的情况下,我试图与wininet.lib链接。我认为这是CMake中的一个错误,我花了很长时间寻找解决方法。最终我发现以下工作:

使用find_library命令查找.lib文件的绝对路径,并将其分配给变量。然后在target_link_libraries命令中使用该变量。在你的情况下,它看起来像这样:

find_library(ws2_32_LIBRARY_PATH ws2_32)
add_executable(Executive ${exec_src})
target_link_libraries(Executive ${ws2_32_LIBRARY_PATH})

希望能节省一些时间。