【问题标题】:CMake 'no rule to make target' with external libraryCMake'没有规则来制作目标'与外部库
【发布时间】:2015-09-26 05:45:30
【问题描述】:

我正在尝试将我的一个程序链接到libevent。我使用 CMake 作为构建系统。我的项目结构如下:

my_project
├── CMakeLists.txt
├── README.md
├── build
│   └── Build stuff
└── software
    ├── README.md
    ├── CMakeLists.txt
    ├── include
    ├── libraries
    │   ├── libevent
    │   │   └── CMakeLists.txt
    │   └── anotherlibrary
    │       └── CMakeLists.txt
    ├── prog1
    │   ├── CMakeLists.txt
    ├── prog2
    │   ├── CMakeLists.txt
    └── prog3
        └── CMakeLists.txt

prog1 的 CMakeList.txt(需要链接到 libevent 的那个)

cmake_minimum_required(VERSION 2.6)
project (prog1)

file(GLOB prog1
    "*.h"
    "*.cpp"
)

include_directories("${PROJECT_INCLUDE_DIR}/libevent/include")

add_executable(${PROJECT_NAME} ${prog1})
target_link_libraries(${PROJECT_NAME} event_core)

但是当我构建项目时,make 找不到 libevent 构建的库。它搜索:libraries/libevent/lib/libevent_core.a 这是错误的路径,因为 libevent 在内部构建它的库:my_project/build/software/libraries/libevent/lib/libevent_core.a

我如何告诉 CMake 在那里搜索库?我已经在我的 Cmake 文件中添加了以下几行,但这不起作用

链接目录(/my_project/build/software/libraries/libevent/lib/) SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build/lib) SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build/bin)

有人建议吗?

【问题讨论】:

  • link_directories 接受带有库文件的 directory,而不是该文件的完整路径。所以comman应该被称为link_directories(/my_project/build/software/libraries/libevent/lib)
  • 从您的文件结构来看,尚不清楚这是否是一个 CMake 项目。显示的prog1/CMakeLists.txt 暗示您有多个项目。您能否添加根 CMakeLists.txt 文件的内容以进行澄清?我建议只有一个项目,或者 - 如果您不介意多次构建库 - 将 prog1 的 CMake 依赖项包含到其 CMakeList.txt 中。像add_subdirectory(../libraries/libevent libevent) 这样的东西,然后使用add_dependencies(${PROJECT_NAME} event_core) 使您的可执行文件依赖它。然后 CMake 将处理链接部分。
  • @Tsyvarev 打错字了,抱歉。

标签: c++ cmake makefile libevent


【解决方案1】:

我通过从build 目录中删除内容并在build 目录中重新运行cmake .. 自己解决了这个问题。

我认为 CMake 不知何故没有意识到我所做的更改,并且通过重建项目问题得到了解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多