我正在尝试将我的一个程序与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
需要链接到libevent的prog1的CMakeList.txt
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文件中添加了以下代码,但这并没有起作用:
link_directories(/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,而不是该文件的完整路径。因此,应该这样调用命令:link_directories(/my_project/build/software/libraries/libevent/lib)
。 - Tsyvarevprog1 / CMakeLists.txt
暗示您有多个项目。您能否添加根目录CMakeLists.txt
文件的内容以进行澄清?我建议只有一个项目,或者如果您不介意多次构建库,请将prog1
的CMake依赖项包含到其CMakeList.txt
中。像add_subdirectory(../libraries/libevent libevent)
这样的方式,然后使用add_dependencies(${PROJECT_NAME} event_core)
使可执行文件依赖于它。CMake 将处理链接部分。 - Florian