如何在CMake中添加Windows库?

5
我想将ws2_32.lib包含到我的应用程序中,但CMake会在项目属性中添加-l。
...
add_executable(Executive ${exec_src})
target_link_libraries(Executive ws2_32)

这是我的CMakeLists.txt文件的样子,但是当我在“Input”下检查VS2010链接器属性页面时,它列出了-lws2_32.lib。为什么它要添加-l?如何去掉它呢?因为一旦我手动更改为ws2_32.lib,项目就能够正确地链接。
我尝试了以下内容:find_library(WIN_C ws2_32),但结果是NOTFOUND

你正在使用什么生成器?Visual Studio吗? - arrowd
2个回答

3
我遇到了同样的问题,使用Visual Studio 2010生成器和CMake 2.8.11.2。在我的情况下,我试图链接wininet.lib。我认为这是CMake的一个bug,并花了很长时间寻找解决方法。最终我发现以下方法可行:
使用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})

希望这能为某些人节省一些时间。

2
自从我上次回答后,我自己找到了更好的方法。
你在CMAKE输出的开头看到了像这样的东西吗?
The C compiler identification is unknown
The CXX compiler identification is unknown

如果是这样,似乎CMake没有正确确定您的编译器,因此无法正确地处理如何传递链接器参数。在我的情况下,看起来它被我安装的工具套件所困惑。我有各种版本的VS2010 express工具,还有TFS Team Explorer - 它安装了Visual Studio shell。看起来CMake看到了devenv.exe的存在,并认为我有完整的Visual Studio。您可以通过指定CMAKE_MAKE_PROGRAM变量来解决此问题 - 在命令行上使用-D CMAKE_MAKE_PROGRAM或在GUI中勾选高级复选框并找到条目。我需要将其从C:/PROGRA~2/MICROS~1.0/Common7/IDE/devenv.com更改为C:/PROGRA~2/MICROS~1.0/Common7/IDE/VCExpress.exe - 注意正斜杠!做完这些后,我就不需要再执行find_library操作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接