cmake 链接静态库 - 您是否必须告诉 cmake 在哪里查看?

net*_*tom 3 c++ cmake static-libraries pcapplusplus

我已经pcapplusplus在我的 linux 机器上安装了 c++ 库,并且.a文件已经放在/usr/local/lib. 我现在试图在 cmake 中使用target_link_libraries(${PROJECT_NAME} libCommon++.a libPacket++.a libPcap++.a). 但是,它无法找到Packet.h哪个是libPacket++.a. 我在这里做错了什么?我必须告诉 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)
Run Code Online (Sandbox Code Playgroud)

wol*_*lff 5

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

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

除非你这么说,否则 CMake 无法知道两者相互关联。

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

使用target_include_directoriesthen 包含头文件的路径。