c++ - cmake 链接到静态库 - 你必须告诉 cmake 去哪里找吗?

标签 c++ cmake static-libraries pcapplusplus

我已经在我的 linux 机器上安装了 c++ 库 pcapplusplus 并且 .a 文件已经放在 /usr/local/lib。我现在尝试使用 target_link_libraries(${PROJECT_NAME} libCommon++.a libPacket++.a libPcap++.a) 在 cmake 中将我的项目与它链接起来。但是,它找不到作为 libPacket++.a 一部分的 Packet.h。我在这里做错了什么?我必须告诉 cmake 去哪里看吗?

cmake_minimum_required(VERSION 2.8.9)
project(networksniffer)
# The version number.
set (networksniffer_VERSION_MAJOR 1)
set (networksniffer_VERSION_MINOR 0)

set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(PROJECT_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src)

# The following folder will be included
include_directories("/usr/local/include/pcapplusplus")

#add_executable(networksniffer ${SOURCES})
add_executable(networksniffer ${PROJECT_SOURCE_DIR}/networksniffer.cpp)

target_link_libraries(${PROJECT_NAME} libCommon++.a libPacket++.a libPcap++.a)

最佳答案

Packet.h 不是 libPacket++.a 的一部分。

libPacket++.a是库,Packet.h是头文件。

CMake 无法知道两者相互关联,除非您告诉它。

我建议使用 find_package 来正确定位两者 ( https://cmake.org/cmake/help/v3.0/command/find_package.html )。

然后使用 target_include_directories 包含头文件的路径。

关于c++ - cmake 链接到静态库 - 你必须告诉 cmake 去哪里找吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48165990/

相关文章:

c++ - 将对象转换为 char,然后转换为 "uncasting it back"

c++ - Hook Outlook,权限问题

保留换行符的 C++ 预处理器字符串化?

c++ - 在子目录中调用 target_link_libraries 的替代方法

c++ - 在 Cmakelist 中添加 Arpack/Armadillo

c++ - 依赖于其他 slib 的静态库是否需要它们的实际 'code' 才能工作?

c++ - 实现格雷厄姆扫描以找到凸包

CMake 3.18.0 找不到 libopenjpeg2

ios - 在 Xcode 中调试静态库

gcc - 如何将D-Bus交叉编译到ARM?