当我试图构建时,我会得到以下错误:
对“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)
添加到文件的末尾,它可以工作,但是有一个更好的方法(请看下面的答案)
发布于 2016-08-21 12:06:26
这不是编写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})
顺便问一下,uuid-dev
是什么意思?我的身体里没有这样的东西
https://stackoverflow.com/questions/39067960
复制