我的目錄結構的Makefile錯誤是:編譯C文件
Project/
+ Source/
| + Module_1/
| | + Module_1.c
| | + Module_1.h
| |
| + Module_2/
| | + Module_2.c
| | + Module_2.h
| |
| + MainFile.c
| + MainFile.h
|
+ Makefile
我Makefile
包含:
SHELL := /bin/sh
CC := clang
AR := ar
CFLAGS := -fPIC -std=c99 -O2
LDFLAGS := -shared
ARFLAGS := -rcs
BLDDIR := Build
OBJDIR := Object
SOURCES := $(wildcard Source/**/*.c Source/*.c)
OBJECTS := $(patsubst %.c, $(OBJDIR)/%.o, $(SOURCES))
TARGET_A := $(BLDDIR)/MyLibrary.a
TARGET_SO := $(patsubst %.a, %.so, $(TARGET_A))
PREFIX ?= /usr/local
# ------------------------------------------------------------------------------
.PHONY: all build clean dev distclean _dir
all: build
dev: CFLAGS := -g -Wall -Wextra -fPIC -std=c99
dev: all
build: _dir $(TARGET_A) $(TARGET_SO)
_dir:
mkdir -p $(BLDDIR)
mkdir -p $(OBJDIR)
$(TARGET_A) : $(OBJECTS)
$(AR) $(ARFLAGS) %@ $(OBJECTS)
$(AR) -s %@
$(TARGET_SO):
$(CC) $(LDFLAGS) -o [email protected] $(OBJECTS)
$(OBJDIR)/%.o : %.c
$(CC) $(CFLAGS) -c $< -o [email protected]
clean:
$(RM) -r $(OBJDIR) test
distclean: clean
$(RM) -r $(BLDDIR)
我有1個問題和1個問題,此Makefile
:
- 我問題是當我運行這個文件時,我收到了一條錯誤信息:
$(OBJDIR)/%.o : %.c
,我不知道如何Ø解決它?我試圖將其更改爲$(OBJECTS) : %.o : %.c
或%.o : %.c
,但仍然沒有運氣。 - 這是我的第一個
Makefile
,我在想這個文件中的設置是否正常,或者我需要更好的策略/規則?如果是這樣,我該如何改進呢?
編輯
我得到的錯誤是:
make: *** No rule to make target 'Object/MainFile.c', needed by 'Object/MainFile.o'. Stop.
編輯
正如@Beta在評論中指出的那樣,我改變了每個模塊中的文件名,以使*.o
文件名不同。
人們仍在使用makefile嗎? SCONS還是Gradle? –
該規則看起來正確。什麼是錯誤? – Beta
瘋狂猜測:確保您使用單個選項卡而不是空格爲目標命令添加前綴。 Makefiles很奇怪。並且,發佈錯誤,以便我們可以提供幫助。 –