2013-07-25 45 views
3

我想將ws2_32.lib添加到我的應用程序中,但CMake在-l上添加了項目屬性。如何在CMake中添加Windows庫?

... 
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

+0

您使用的是什麼發生器? 'Visual Studio'? – arrowd

回答

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}) 

希望能節省一些人一些時間。

2

由於我以前的答案,我自己找到了一個更好的方法。

在你的CMake開始輸出的是你看到這樣的事情?:

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

如果是這樣,似乎CMake的不正確判斷你的編譯器 - 所以沒有正確工作,如何通過鏈接器參數。

在我看來,它似乎被我安裝的工具套件所困惑。我有各種版本的VS2010快速工具,還有安裝Visual Studio外殼的TFS團隊資源管理器。它看起來像CMake看到devenv.exe的存在,並假設我有一個完整的視覺工作室。

您可以通過指定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了。