我在我的linux机器上安装了c ++库pcapplusplus
,而.a
文件已经放在/usr/local/lib
中。我现在正尝试使用target_link_libraries(${PROJECT_NAME} libCommon++.a libPacket++.a libPcap++.a)
在cmake中将我的项目与它链接起来。但是,找不到Packet.h
libPacket++.a
的一部分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)
。我在这做错了什么?我必须告诉cmake在哪里看?
any
答案 0 :(得分:3)
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
包含头文件的路径。
答案 1 :(得分:1)
您需要添加标题搜索目录路径,编译器可以在其中找到您的案例Packet.h
您可以尝试使用命令locate Packet.h
找出系统中的路径。然后,您可以使用include_directories()
函数添加该路径。即如果您在Packet.h
中找到了/usr/local/include/
,那么您应该更新如下。
include_directories("${PROJECT_SOURCE_DIR}"/include "/usr/local/include/")
答案 2 :(得分:0)
错误是因为它无法找到头文件。我看到你没有提到任何包含文件夹。 Packet.h文件必须位于/ usr / local / include中。你可以包括这个。 或者你可以添加这样的东西
find_package(pcapplusplus REQUIRED)
include_directories(${PCAPPLUSPLUS_INCLUDE_DIRS})
自己照顾好名字。