cmake链接到静态库 - 你必须告诉cmake在哪里看?

时间:2018-01-09 10:20:50

标签: c++ cmake static-libraries

我在我的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

3 个答案:

答案 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})

自己照顾好名字。