我对手工制作的make文件比较新.我已经整理了一个用于构建库的基本make文件.我想将所有临时.o文件保存在构建目录中,并将构建的可执行文件存储在bin目录中.
我的目录结构如下所示:
root
src/
include/
build/
bin/
Makefile
Run Code Online (Sandbox Code Playgroud)
这就是我的make文件的样子:
SHLIB = pg_extlib
SRC = src/file1.c \
src/file2.c
OBJS = build/file1.o \
build/file2.o
debug_build:
gcc -g -fPIC -c $(SRC) -I`pg_config --includedir` -I`pg_config --includedir-server` -I/some/required/path/include -Iinclude
gcc -shared -o bin/$(SHLIB).so $(OBJS) -lm -lpq -lmylib_core
clean:
rm -f $(SHLIB) $(OBJS)
Run Code Online (Sandbox Code Playgroud)
.o文件正确放置在构建文件夹中,但它们也出现在根文件夹中(Makefile所在的位置).我该如何解决?
我很难找到关于makefiles的任何信息,这是真正的初学者级别.即使是问题,这里的问题也是使用一些我不理解的符号来呈现的$(CC) $(INC) $< $(CFLAGS) -o $(BIN)$@ $(LIBS).那让我失望了.
我的makefile看起来像这样:
cpptest: main.o
g++ -o cpptest main.o
main.o: main.cpp
g++ -c main.cpp
clean:
rm cpptest main.o
Run Code Online (Sandbox Code Playgroud)
这是我知道如何处理makefile的全部限制.它可以工作,但将main.o和cpptest.exe文件放入项目根目录.
我想将main.o文件和cpptest.exe文件放入/ build /目录.但是,如果我./build/在每个main.o和每个cpptest之前放置,则目标文件将出现在项目根目录中,并且exe文件根本不会出现.
我正在使用Windows上的Sublime Text 3来构建这个东西,这是值得的.
我正在尝试创建一个Makefile,它.c可以编译所有文件而无需在Makefile中每行添加文件名行.我认为这与makefile非常相似- 一次编译所有c文件.这就是我想要做的事情:
1 - 验证是否所有.c文件都来自/src其各自的.o文件/obj.如果该.o文件不存在,请从该.c文件构建它;
2 - main.exe从所有编译.o并打开它/bin.
我的Makefile:
BIN = ./bin
OBJ = ./obj
INCLUDE = ./include
SRC = ./src
all:
gcc -c "$(SRC)/Distances.c" -o "$(OBJ)/Distances.o"
gcc -c "$(SRC)/HandleArrays.c" -o "$(OBJ)/HandleArrays.o"
gcc -c "$(SRC)/HandleFiles.c" -o "$(OBJ)/HandleFiles.o"
gcc -c "$(SRC)/Classifier.c" -o "$(OBJ)/Classifier.o"
gcc -c main.c -o "$(OBJ)/main.o"
gcc -o $(BIN)/main.exe $(OBJ)/*.o -lm
run:
$(BIN)/main.exe
clean:
del /F …Run Code Online (Sandbox Code Playgroud)