连接FAIL的"uuid"

Big*_*eam 2 c++ linker cmake

在尝试构建时我得到了这个错误:

对'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})
Run Code Online (Sandbox Code Playgroud)

我可以通过自己创建Makefile并添加-luuid标志来解决这个问题.

但我想用CMake做,我试图在CMakeLists.txt文件中添加此标志,但它没有帮助:(

我安装了uuid-dev(这不是问题)

希望您能够帮助我.

祝你今天愉快

编辑:我添加target_link_libraries(Synergy uuid)到文件的末尾,它的工作原理,但有一个更好的方法(看下面的答案)

Ama*_*eus 6

这不是编写CMake脚本的好方法.CMake具有丰富的功能,您必须使用它来描述您想要做的事情.

在您的情况下,您必须避免直接设置标志.通过这种方式,您将能够更改编译器甚至操作系统,您的脚本仍然可以工作.

在你的情况下,我会写这样的东西:

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})
Run Code Online (Sandbox Code Playgroud)

顺便问一下,是什么意思uuid-dev?我的系统中没有这样的东西