【发布时间】:2017-03-24 01:05:11
【问题描述】:
假设我有一个这样的文件夹结构:
|
| - src
|- file.c
|- folderOne
|- file2.c
|- file3.S
|- folderTwo
|-folderThree
|- file4.c
我目前有一个生成文件,可以像这样抓取我的所有程序集和 C 文件:
S_SRC = $(wildcard *.S) $(wildcard **/*.S)
C_SRC = $(wildcard *.c) $(wildcard **/*.c)
S_OBJS = $(patsubst %.S,%.o,$(filter %.S,$(S_SRC)))
C_OBJS = $(patsubst %.c,%.o,$(filter %.c,$(C_SRC)))
OBJS = $(S_OBJS) $(C_OBJS)
这些行只获取所有.c 和.S 文件,并创建它们等效的.o 值。我的管道在源文件上运行 GCC,然后手动链接它们。
我使用以下语法运行 GCC:
$(OBJS): $(C_SRC) $(S_SRC)
$(CC) $(CC_F) $(S_SRC) $(C_SRC) -o $(OBJS)
我将源文件传递给 GCC 的地方。 CC_F 变量是我的标志变量:
CC_F = -m32 -Wall -Wextra -Werror -g -c
然后我想像这样运行我的链接器:
$(PROGR): $(OBJS) $(LINK_SRC)
$(LD) $(LD_F) -o $(PROGR) $(OBJS)
同样,LD_F 只是我的链接器标志。
我目前遇到的问题是,对于不止一次的源文件,GCC 无法解析命令,输出如下内容:
gcc -m32 -Wall -Wextra -Werror -g -c src/file1.S src/file2.c -o src/file1.o src/file2.o
gcc: error: src/file2.o: No such file or directory
我想做的是让 GCC 将每个源文件的目标文件输出到与源文件相同的目录中。在给定的示例中,运行 makefile 应该会产生以下布局:
|
| - src
|- file.c
|- file.o
|- folderOne
|- file2.c
|- file2.o
|- file3.S
|- file3.o
|- folderTwo
|-folderThree
|- file4.c
|- file4.o
在我当前的设置以及不同数量的目录/文件下,这怎么可能。
【问题讨论】:
-
您不能有多个输出文件。文件
src/file2.o被视为源对象但不存在。更改您的 Makefile 以一次编译一个源并输出一个对象。 -
@alvits 你能告诉我怎么做吗?