如何向生成文件添加库路径?

问题描述 投票:0回答:1

我正在制作用于在主机和基于手臂的微控制器之间进行交叉编译的makefile。那么,如何在makefile的配方中添加特定的库?

include sources.mk

ifeq ($(PLATFORM),MSP432)
# Platform Overrides

# Architectures Specific Flags
LINKER_FILE = msp432p401r.lds
CPU = cortex-m4
ARCH = thumb
SPECS = nosys.specs
CPP = -mcpu=$(CPU) -m$(ARCH) --specs=$(SPECS) -DMSP432
# Compiler Flags and Defines

CC = arm-none-eabi-gcc
LD = arm-none-eabi-ld
endif


ifeq ($(PLATFORM),HOST)

CC = gcc
CPP= DHOST
endif


TARGET =c1m2
LDFLAGS = -Wl,-Map=$(TARGET).map -T $(LINKER_FILE)
CFLAGS =  -Wall -Werror -g -O0 -$(CPP) -I/Desktop/ese-coursera- 
course1/assessments/m2/include/common/platform.h
-std=c99



.PHONY: build
build: all

.PHONY: all
all: $(TARGET).out


.PHONY: clean
clean:  
rm -f $(OBJS) $(TARGET).out $(TARGET).map

%.o : %.c
$(CC) -c $< $(CFLAGS) -o $@
OBJS = $(SOURCES:.c=.o)

$(TARGET).out: $(OBJS)
$(CC) $(OBJS) $(CFLAGS) $(LDFLAGS) -o $@

这是正确的方法吗?(尽管在此处的代码中未显示,但make文件的所有制表符和缩进都已正确给出)

我将其作为错误

main.c:23:10: fatal error: platform.h: No such file or directory
 #include "platform.h"
          ^~~~~~~~~~~~
compilation terminated.
Makefile:67: recipe for target 'main.o' failed
make: *** [main.o] Error 1

这也是我的source.mk文件

SOURCES = Desktop/ese-coursera-course1/assessments/m2/src

# Add your include paths to this variable
INCLUDES = Desktop/ese-coursera-course1/assessments/m2/include/common/platform.h

有人可以帮我吗?

c makefile
1个回答
0
投票

首先,请确保您提供的所有路径都相对于Makefile。

[我很惊讶您的编译器实际上会执行任何操作,因为您的SOURCES变量是目录,而不是.c文件的列表。它可能看起来像:

SOURCES = src/main.c

这将使OBJS包含src/main.o,并且隐式规则将能够触发。

接下来,INCLUDES变量应使用-I标志引用directory,如下所示:

INCLUDES = -Iinclude/common

然后您应该在CFLAGS定义中使用它,如下所示:

CFLAGS  = -Wall -Werror -g -O0 -$(CPP) $(INCLUDES) -std=c99

我注意到的其他事项:

  • 即使在主机情况下,您的LDFLAGS也无条件地使用msp432p401r.lds链接描述文件。可能应该有条件地将其添加到ifeq块中,如下所示:LDFLAGS += -T msp432p401r.lds。您应注意不要稍后用LDFLAGS=覆盖LDFLAGS,因此最好将CFLAGS和LDFLAGS的定义移到文件顶部,或者始终使用+=修改这些变量。
  • 其次:如果您的链接步骤使用了链接描述文件,则应添加一个明确的规则来对该依赖性进行编码:$(TARGET).out: $(LINKER_FILE)
  • build -> all -> $(TARGET).out依赖项链有点多余。为什么不让build直接依赖于$(TARGET).out
© www.soinside.com 2019 - 2024. All rights reserved.