2016-08-21 47 views
-1

CMake的 「UUID」 試圖建立我得到這個錯誤,當鏈接失敗

未定義的引用 'uuid_generate'

未定義的引用 'uuid_unparse'

我CMakeLists。 txt文件:

cmake_minimum_required(VERSION 3.6) 
project(Synergy) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -luuid -pthread") 
find_package (Threads) 

set(SOURCE_FILES Functions.cpp Inotify.cpp Inotify.h main.cpp Master.h Message.cpp Message.h Server.cpp Server.h Threads.cpp) 
add_executable(synergy_server ${SOURCE_FILES}) 

我可以通過創建Makefile來解決這個問題由我自己和添加-luuid標誌。

,但我想通過CMake做到這一點,我想在的CMakeLists.txt文件中添加這個標誌,但它並不能幫助:(

我已經安裝的uuid-dev的(這不是問題)

希望你能幫助我

有一個愉快的一天

編輯: 我添加target_link_libraries(Synergy uuid)到文件的末尾,它的工作原理,但有更好的爲什麼在答案中寫的是什麼

+1

[CMake鏈接到外部庫]的可能的副本(http://stackoverflow.com/questions/8774593/cmake-link-to-external-library) – usr1234567

+0

您的問題是幾乎所有的CMake教程。你有的實際問題是更一般的。 「如何鏈接外部庫與CMake」 – usr1234567

+0

你說得對,我是堆棧溢出的新手,所以我還在學習。下次我會更一般。但問題是,我試圖添加外部庫,但它不起作用。 – Bigicecream

回答

1

這不是編寫CMake腳本的好方法。 CMake帶有豐富的功能,你必須用它來描述你想要做的事情。

在你的情況,你必須避免直接設置標誌,因爲你已經完成了。通過這種方式,您將能夠更改編譯器甚至OS,並且腳本仍然可以工作。

在你的情況,我會寫這樣的事:

cmake_minimum_required(VERSION 3.6) 
project(Synergy) 

set(CMAKE_CXX_STANDARD 11) 

# using pkg-config to configure uuid 
find_package(PkgConfig REQUIRED) 
find_package(Threads REQUIRED) 

pkg_search_module(UUID REQUIRED uuid) 

set(SOURCE_FILES Functions.cpp Inotify.cpp Inotify.h main.cpp Master.h message.cpp Message.h Server.cpp Server.h Threads.cpp) 
add_executable(synergy_server ${SOURCE_FILES}) 
target_include_directories(synergy_server PUBLIC ${UUID_INCLUDE_DIRS}) 
target_link_libraries(synergy_server ${UUID_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) 

順便說一句,拿什麼uuid-dev?我的系統中沒有這樣的東西

+0

uuid-dev是uuid的開發包,即uuid的標頭。也許你的發行版並沒有將這個庫分成開發包和庫包。 – usr1234567

+0

我的cmake文件由Clion創建,我會嘗試使用您的文件,我會告訴你它是否適合我 – Bigicecream

相關問題