我对编译在不同源文件夹下分发的C代码有疑问。 我的项目结构如下
root directory---> Project
sub-directory--> include => add.h sub.h
sub-directory--> source => add.c sub.c
sub-directory--> src => main.c crc.c spi.c
如何编写一个简单的makefile来编译和链接不同目录中的源以创建可执行文件?
答案 0 :(得分:1)
您可以在Makefile中列出所有源文件的路径:
SOURCES=\
src/main.c \
src/crc.c \
src/spi.c \
sources/add.c \
sources/sub.c
答案 1 :(得分:0)
这是您可以使用的基本makefile示例。 建议使用Clean删除已编译的可执行文件
# ------------------------------------------------
# Generic Makefile
#
# Author: yanick.rochon@gmail.com
# Date : 2010-11-05
#
# Changelog :
# 0.01 - first version
# ------------------------------------------------
# project name (generate executable with this name)
TARGET = projectname
CC = gcc -std=c99 -c
# compiling flags here
CFLAGS = -Wall -I.
LINKER = gcc -o
# linking flags here
LFLAGS = -Wall
SOURCES := $(wildcard *.c)
INCLUDES := $(wildcard *.h)
OBJECTS := $(SOURCES:.c=*.o)
rm = rm -f
$(TARGET): obj
@$(LINKER) $(TARGET) $(LFLAGS) $(OBJECTS)
@echo "Linking complete!"
obj: $(SOURCES) $(INCLUDES)
@$(CC) $(CFLAGS) $(SOURCES)
@echo "Compilation complete!"
clean:
@$(rm) $(TARGET) $(OBJECTS)
@echo "Cleanup complete!"
这将编译具有特定文件扩展名的目录中的所有文件。
PS:如果您将文件命名为“makefile”,则执行该文件所需要做的就是在linux终端上写“ ./ make ”提示。
答案 2 :(得分:0)
似乎您必须在每个子目录中放置一个单独的makefile,并从根目录开始递归调用每个子目录。 Gnu在这里提到了递归的makefile:https://www.gnu.org/software/make/manual/html_node/Recursion.html
然而,有可能有理由不做这样的事情。一些具体的例子是 这里提到: http://miller.emu.id.au/pmiller/books/rmch/您也可以选择将路径硬编码到makefile中,就像这个用户一样: Makefile: Compiling from directory to another directory