Linux下CMakeLists.txt如何替代Makefile的include PcapPlusPlus.mk命令?
用CMake替代PcapPlusPlus.mk的配置方案
嘿,我来帮你把Makefile里的include /usr/local/etc/PcapPlusPlus.mk转换成CMake的配置!咱们先拆解一下这个.mk文件里的关键内容,然后对应到CMake里一步步实现:
先理清PcapPlusPlus.mk的作用
这个.mk文件主要帮我们搞定了三件事:
- 指定头文件包含路径:
/usr/local/include/pcapplusplus和/usr/include/netinet - 声明需要链接的库:PcapPlusPlus自身的三个库(Pcap++、Packet++、Common++),加上系统依赖的
libpcap和pthread - 预留编译标志位(当前是空的,但我们得留好扩展空间)
改造你的CMakeLists.txt
把上面的逻辑对应到CMake中,修改后的完整配置如下:
cmake_minimum_required(VERSION 2.8.9) project(networksniffer) # 设置项目版本号 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) # 1. 替代PCAPPP_INCLUDES:添加所有需要的头文件目录 include_directories( /usr/local/include/pcapplusplus /usr/include/netinet ) # 2. 替代PCAPPP_BUILD_FLAGS:如果后续有编译标志可以加在这里(当前.mk里为空,先注释) # target_compile_options(networksniffer PRIVATE ${PCAPPP_BUILD_FLAGS}) # 添加可执行文件目标 add_executable(networksniffer ${PROJECT_SOURCE_DIR}/networksniffer.cpp) # 3. 替代PCAPPP_LIBS:链接所有依赖库(含PcapPlusPlus库和系统库) target_link_libraries(networksniffer Pcap++ Packet++ Common++ pcap pthread )
关键修改点说明
- 头文件路径:把.mk里的两个include路径全部加入
include_directories,确保编译器能找到PcapPlusPlus的头文件和Linux网络相关头文件 - 链接库配置:原来的.mk用动态库格式
-lxxx,CMake支持直接写库名(如Pcap++),它会自动查找对应的动态/静态库;同时别忘了补上系统依赖的pcap和pthread - 编译标志扩展:如果后续
PCAPPP_BUILD_FLAGS有内容,用target_compile_options绑定到目标上,比全局的CMAKE_CXX_FLAGS更灵活
这样配置后,CMake就完全替代了include PcapPlusPlus.mk的作用,编译效果和官方示例Makefile完全一致!
内容的提问来源于stack exchange,提问作者netleap tom




