尝试添加外部库时出现 CMake 错误

Posted

技术标签:

【中文标题】尝试添加外部库时出现 CMake 错误【英文标题】:CMake error when try to add external library 【发布时间】:2018-11-25 11:48:57 【问题描述】:

我需要在我的项目中添加一个外部库。 这是项目结构:

/- src/
    - my source files here…
 |- dist/
    |- FLTK
        |- lib/
            |- libfltk.a
            |- libfltk_forms.a
        |- FL
 |- build/
 |- main.cpp

这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -g -std=c++17")

find_library(LibFltk $CMAKE_CURRENT_SOURCE_DIR/dist/FLTK/lib/libfltk.a)
find_library(LibFltk_Forms $CMAKE_CURRENT_SOURCE_DIR/dist/FLTK/lib/libfltk_forms.a)

if(APPLE)
  find_library(COCOA Cocoa)
endif()

include_directories($CMAKE_CURRENT_SOURCE_DIR/dist/FLTK)

add_executable($CMAKE_CURRENT_SOURCE_DIR/build/main $CMAKE_CURRENT_SOURCE_DIR/main.cpp)

target_link_libraries($CMAKE_CURRENT_SOURCE_DIR/build/main $LibFltk $COCOA)

错误信息:

    CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
LibFltk
    linked by target "keyplay" in directory /Users/coder/Desktop/sandbox/keyplay

-- 配置不完整,出现错误!

当我尝试从终端编译我的项目时,它运行良好。 我就是这样做的:

g++ -std=c++17 -c main.cpp -I dist/FLTK \
    && g++ main.o -o main -L dist/FLTK/lib -lfltk_forms \
       -lfltk_images \
       -lfltk \
       -lfltk_gl \
       -framework Cocoa \
    && ./main

我的 CMakeLists.txt 有什么问题?

谢谢。

【问题讨论】:

你试过了吗(cmake.org/cmake/help/v3.0/command/find_library.htmlfind_library(LibFltk libfltk.a PATHS $CMAKE_CURRENT_SOURCE_DIR/dist/FLTK/lib/) 感谢 Matthieu,它帮助了我! 解决问题了吗?如果是,我会回答。 是的,Matthieu,这是正确的答案。 【参考方案1】:

感谢@Matthieu Brucher。这是正确的配置:

cmake_minimum_required(VERSION 2.8)

set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -g -std=c++17")
include_directories($CMAKE_CURRENT_SOURCE_DIR/dist/FLTK)

add_executable(keyplay $CMAKE_CURRENT_SOURCE_DIR/main.cpp)

find_library(LibFltk libfltk.a PATHS $CMAKE_CURRENT_SOURCE_DIR/dist/FLTK/lib/)

if(APPLE)
  find_library(COCOA Cocoa)
endif()

target_link_libraries(keyplay $LibFltk $COCOA)

【讨论】:

【参考方案2】:

find_library 函数期望第二个参数是您的目标文件名 (http://www.cmake.org/cmake/help/v3.0/command/find_library.html),并且您需要指定作为附加参数的路径:

find_library(LibFltk libfltk.a PATHS $CMAKE_CURRENT_SOURCE_DIR/dist/FLTK/lib/)
find_library(LibFltk_Forms libfltk_forms.a PATHS $CMAKE_CURRENT_SOURCE_DIR/dist/FLTK/lib/)

【讨论】:

以上是关于尝试添加外部库时出现 CMake 错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 CMake 添加库会导致错误

尝试注册 ImageIOFactory 时出现 ITK 构建错误

将外部 js 添加到 Vue CLI 时出现 Mime 类型错误

cmake mingw-w64:尝试构建时出现奇怪的错误

尝试在 ROS 中创建 catkin 工作区时出现 CMake 错误,因为它找不到 PythonInterp

关于在vs2010中编译Qt项目时出现“无法解析的外部命令”的错误