如何在LEDE SDK编译Reaver的Makefile中添加CFLAGS?
在LEDE SDK中为Reaver添加调试编译选项的正确方法
嘿,针对你在编译Reaver时想添加CFLAGS="-O0 -g3"的问题,不能只把它加到CONFIGURE_ARGS里,因为LEDE/OpenWrt的构建系统有专门的变量来管理编译选项,直接修改CONFIGURE_ARGS可能会被系统默认的编译参数覆盖,或者无法正确生效。下面是具体的解决方法:
正确的修改方式
LEDE构建系统使用TARGET_CFLAGS变量来传递编译选项给目标包的编译过程。你需要在Makefile中合适的位置设置这个变量,步骤如下:
找到
include $(INCLUDE_DIR)/package.mk这一行,在它之后添加编译选项的设置:include $(INCLUDE_DIR)/package.mk # 移除默认的优化级别(比如-O2),替换为-O0并开启调试符号 TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS)) -O0 -g3 CONFIGURE_PATH:=src MAKE_PATH:=src CONFIGURE_ARGS += --enable-savetocurrent如果你只是想追加调试选项而不完全覆盖默认优化(不推荐调试场景),可以用
+=:TARGET_CFLAGS += -O0 -g3不过这种情况下如果系统默认有
-O2,编译器可能会优先使用最后出现的优化选项,但为了确保调试环境的纯净,更建议用第一种方式过滤掉原有优化级别。
为什么不推荐加在CONFIGURE_ARGS里?
LEDE的构建系统会自动把TARGET_CFLAGS、TARGET_CPPFLAGS等变量传递给configure脚本的参数,如果你手动在CONFIGURE_ARGS里加CFLAGS="-O0 -g3",可能会和系统传递的参数冲突,导致你的设置不生效。而直接修改TARGET_CFLAGS是符合OpenWrt/LEDE包构建规范的做法,能确保参数被正确传递到编译流程中。
修改后的完整Makefile关键片段
include $(INCLUDE_DIR)/package.mk # 设置调试编译选项 TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS)) -O0 -g3 CONFIGURE_PATH:=src MAKE_PATH:=src CONFIGURE_ARGS += --enable-savetocurrent define Package/reaver SECTION:=net CATEGORY:=Network SUBMENU:=wireless TITLE:=Efficient brute force attack against Wifi Protected Setup URL:=https://github.com/t6x/reaver-wps-fork-t6x DEPENDS:=+libpcap endef
这样修改后,重新编译Reaver就能得到带有调试符号、无优化的二进制文件了。
内容的提问来源于stack exchange,提问作者Vido




