配置Makefile以生成.a库而不是.lib

时间:2014-09-09 12:24:43

标签: linux makefile libraries

我试图在Linux Ubuntu环境中编译一个C库(并且将由嵌入式Linux程序使用),但当我在其上执行make时,我得到一个{{ 1}}而不是.lib文件,甚至认为Makefile中没有任何地方可以命令进行这样的更改(预计在Ubuntu中编译库会默认生成.a文件!)。

以下是从这个库中使用的Makefile(结果现在是.a):

生成文件

calculos.lib

所以问题是:我应该如何配置我的Makefile,以便生成# ---------------------------------------------------------------------------- # Name of the ARM GCC cross compiler & archiver # ---------------------------------------------------------------------------- ARM_TOOLCHAIN_PREFIX = arm-arago-linux-gnueabi- ARM_TOOLCHAIN_PATH = /re8k/linux-devkit ARM_CC := $(ARM_TOOLCHAIN_PATH)/bin/$(ARM_TOOLCHAIN_PREFIX)gcc ARM_AR := $(ARM_TOOLCHAIN_PATH)/bin/$(ARM_TOOLCHAIN_PREFIX)ar # Get any compiler flags from the environment ARM_CFLAGS = $(CFLAGS) ARM_CFLAGS += -std=gnu99 \ -Wdeclaration-after-statement -Wall -Wno-trigraphs \ -fno-strict-aliasing -fno-common -fno-omit-frame-pointer \ -c -O3 ARM_LDFLAGS = $(LDFLAGS) ARM_LDFLAGS+=-lm -lpthread ARM_ARFLAGS = rcs # ---------------------------------------------------------------------------- # Name of the DSP C6RUN compiler & archiver # TI C6RunLib Frontend (if path variable provided, use it, otherwise assume # the tools are in the path) # ---------------------------------------------------------------------------- C6RUN_TOOLCHAIN_PREFIX = c6runlib- C6RUN_TOOLCHAIN_PATH = $(ARM_TOOLCHAIN_PATH)/c6run C6RUN_CC := $(C6RUN_TOOLCHAIN_PATH)/bin/$(C6RUN_TOOLCHAIN_PREFIX)cc C6RUN_AR := $(C6RUN_TOOLCHAIN_PATH)/bin/$(C6RUN_TOOLCHAIN_PREFIX)ar C6RUN_CFLAGS = -c -mt -O3 C6RUN_ARFLAGS = rcs # ---------------------------------------------------------------------------- # List of lib source files # ---------------------------------------------------------------------------- LIB_SRCS := calculos.c LIB_DSP_OBJS := $(LIB_SRCS:%.c=dsp_obj/%.o) LIB_OBJS := $(LIB_DSP_OBJS:%.o=%.lib) all: dsp_obj/.created $(C6RUN_CC) $(C6RUN_CFLAGS) -o $(LIB_DSP_OBJS) $(LIB_SRCS) -DUSE_DSP; $(C6RUN_AR) $(C6RUN_ARFLAGS) $(LIB_OBJS) $(LIB_DSP_OBJS); all_host: dsp_obj/.created gcc -c -o $(LIB_DSP_OBJS) $(LIB_SRCS); ar rcs $(LIB_OBJS) $(LIB_DSP_OBJS); dsp_obj/.created: @mkdir -p dsp_obj @touch dsp_obj/.created clean: rm -rf dsp_obj; distclean: clean 文件而不是.a

1 个答案:

答案 0 :(得分:1)

导致.lib扩展名的行是LIB_OBJS := $(LIB_DSP_OBJS:%.o=%.lib),用[{1}}替换.o中每个文件中的LIB_DSP_OBJS

将该行中的.lib更改为.lib,看看是否符合您的要求。