我已经在我的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)发布于 2018-01-09 18:28:56
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包括头文件的路径。
发布于 2018-01-09 18:27:23
您需要添加头文件搜索目录路径,编译器可以在其中查找头文件,在您的情况下为Packet.h
您可以尝试使用命令locate Packet.h来查找系统上的路径。然后,您可以使用include_directories()函数添加该路径。也就是说,如果你在/usr/local/include/中找到了Packet.h,那么你应该像下面这样更新。
include_directories("${PROJECT_SOURCE_DIR}"/include "/usr/local/include/")发布于 2018-01-09 18:29:28
错误是因为它找不到头文件。我看到你没有提到任何包含文件夹。Packet.h文件必须位于/usr/local/include中。您可以将其包括在内。或者您可以添加类似下面的内容
find_package(pcapplusplus REQUIRED)
include_directories(${PCAPPLUSPLUS_INCLUDE_DIRS})自己处理varible名字。
https://stackoverflow.com/questions/48165990
复制相似问题