【问题标题】:Makefile for cross compilation linux用于交叉编译 linux 的 Makefile
【发布时间】:2014-08-24 10:16:46
【问题描述】:

我被要求将我们的产品移植到另一个应用程序中。(我们的软件在 linux virtualbox 上运行)

我有一个他们的接口文件的目录,还有一个尝试配置他们的软件/硬件的示例代码。我在 s/w 目录下看到了他们的接口文件。在参考代码目录中,我看到了一个参考代码的 makefile。

试图运行他们的参考代码makefile。得到错误

make: *** No rule to make target `../    main.o" :(

顺便说一句,不明白为什么SIMUDIR = -I\..\custom_simcode\ 这是在makefile 中完成的? 对交叉编译器语法也不太熟悉!

ifndef CROSS_CC_PREFIX
  CROSS_CC_PREFIX=$(CROSS_COMPILE)
endif

PROGRAM = customer_sim

CC=$(CROSS_CC_PREFIX)gcc
LD=$(CROSS_CC_PREFIX)ld
RANLIB=$(CROSS_CC_PREFIX)corelib
CFLAGS= -g

all: $(PROGRAM)

## Include path
SIMUDIR = -I\..\custom_simcode\             
CUST_INT_INC = -I./../cust_Intf/DecHandler/inc \
             -I./../CCPU

LIBDIR = -L./../cust_Intf \
         -L./../cust_IntfApi

LIBS = -lpthread -customercif -customerapi

LDFLAGS= $(LIBDIR) $(LIBS)
SOURCE = ./../custom_simcode/main.c \
         ./../custom_simcode/custcode_primitives_init.c \
         ./../custom_simcode/custccp_primitives_init.c

CFLAGS += $(SIMUDIR) $(CUST_INT_INC) -DPRINT_IO_CONSOLE -UADAPT_CCPU_CUSTIF
OBJS =  $(SOURCE:.c=.o)

$(PROGRAM): $(OBJS)
    $(CC) -o $@ $(OBJS) $(LDFLAGS)

main.o: $(SIMUDIR)/main.c $(SIMUDIR) $(CUST_INT_INC)
    $(CC) -c -o /main.o $(SIMUDIR)/main.c


clean:
    -rm -f $(OBJS) $(OBJS) $(PROGRAM)

【问题讨论】:

  • 你可以使用一些chroot-ed 环境——里面有开发工具。
  • SIMUDIR 的使用毫无意义。您应该与 makefile 的作者交谈。

标签: c++ linux windows makefile


【解决方案1】:

您的 $(OBJS) 列出了包含目录的 $(PROGRAMs) 的依赖项,但您的 main.o 规则没有相同的路径。

最好有一个通用的规则来编译 C 文件,比如

%.o: %.c
    $(CC) -c -o $@ $<

然后只需为每个文件分配额外的依赖项,例如:

$(OBJS): $(SIMUDIR) $(CUST_INT_INC)

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多