C语言 CDT解析Makefile输出



我使用Eclipse作为IDE来帮助我开发Arduino程序。我正在使用Arduino Makefile来构建我的项目,并让Eclipse使用"外部"Makefile。makefile非常深入,它在构建过程中设置构建变量。然而,CDT错误高亮显示错误是因为makefile设置了构建变量。是否有一种方法可以让Eclipse运行makefile,然后解析输出以查看项目中是否有任何错误?

Makefile

BOARD_TAG    = uno
MONITOR_PORT = /dev/ttyACM*
include $(ARDMK_DIR)/Arduino.mk

据我所知,没有!无论如何,考虑到CDT托管make构建的递归特性,这将是一项相当艰巨的任务。如果你愿意,你可以在C/c++ General-> preprocessor Include Paths->Entries->GNU C->CDT User Settings Entries下定义预处理器符号。

建议方案

  • 让你的makefile在编译前使用bash脚本生成一个带有这些值的头文件

实现示例

我现在工作的主要项目使用Eclipse-CDT-External-Makefile。我们有几个"CONFIG_DO_ABC"类型变量。我们生成一个config.h。下面是一个简单的例子。

Makefile

include config.mk
all:
    ./config.awk config.mk > config.h
    gcc main.c -o main.o    
clean:
    rm -r *.o main

config.mk

CONFIG_A  := 1
CONFIG_B  := 2
CONFIG_C  := 3

config.awk

#!/usr/bin/awk -f
BEGIN {
    print "/* Generated by config.awk; do not edit */"
    print "#ifndef CONFIG_H"
    print "#define CONFIG_H"
}
$1 ~ /^CONFIG_/ && $2 ~ /^:?=$/ { print "#define", $1, $3 }
END { print "#endif" }

main.c(说明性示例)

#include "config.h"
int main (void) {
    return CONFIG_A;
}

(使控制台输出)

make all 
./config.awk config.mk > config.h
gcc main.c -o main.o    

这在我的用例中工作得非常好,特别是对于#ifdef变量(例如#ifdef HALT_ON_BUG,或其他东西)。

您将不得不使用比配置更复杂的脚本。Awk在这里为您的字符串使用;但希望这足以让你开始。

最新更新