我希望能够将我的bin和我的代码文件拆分成单独的目录,因为它在当前状态下变得难以管理.
我理想的是希望拥有
project_dir
|-Makefile
|-run_tests.sh
|
|__source
| |-program1.cpp
| |-program2.cpp
|
|__bin
|-program1
|-program2
Run Code Online (Sandbox Code Playgroud)
但是我无法使用我当前的系统,而不必手动写出每个程序的规则(请记住,每个程序都是一个单独的程序,而不是一系列链接在一起的对象)
#Current make system
BIN=./bin/
SOURCE=./source/
LIST=program1 program2...
all: $(LIST)
%: $(SOURCE)%.cpp
$(CC) $(INC) $< $(CFLAGS) -o $(BIN)$@ $(LIBS)
Run Code Online (Sandbox Code Playgroud)
这工作除了它我无法在当前路径中看到目标,因此它认为它总是重建二进制文件,即使源文件没有更改.
我目前唯一想到的是编写一个程序来制作一个makefile,但我不想这样做.
Did*_*set 20
你快到了......
#Current make system
BIN=./bin/
SOURCE=./source/
LIST=$(BIN)/program1 $(BIN)/program2...
all: $(LIST)
$(BIN)/%: $(SOURCE)%.cpp
$(CC) $(INC) $< $(CFLAGS) -o $@ $(LIBS)
Run Code Online (Sandbox Code Playgroud)
您还可以LIST使用以下内容轻松实现
PROG=program1 program2
LIST=$(addprefix $(BIN)/, $(PROG))
Run Code Online (Sandbox Code Playgroud)
这是 Makefile 的完整现成版本。
使用以下目录准备文件夹
对于 .o 文件:/build/
对于 .cpp 文件:/src/
对于二进制文件:/bin/
然后在以下位置使用以下 Makefile /
CC = g++
LD = g++
CFLAG = -Wall
PROG_NAME = prog
SRC_DIR = ./src
BUILD_DIR = ./build
BIN_DIR = ./bin
SRC_LIST = $(wildcard $(SRC_DIR)/*.cpp)
OBJ_LIST = $(BUILD_DIR)/$(notdir $(SRC_LIST:.cpp=.o))
.PHONY: all clean $(PROG_NAME) compile
all: $(PROG_NAME)
compile:
$(CC) -c $(CFLAG) $(SRC_LIST) -o $(OBJ_LIST)
$(PROG_NAME): compile
$(LD) $(OBJ_LIST) -o $(BIN_DIR)/$@
clean:
rm -f $(BIN_DIR)/$(PROG_NAME) $(BUILD_DIR)/*.o
Run Code Online (Sandbox Code Playgroud)
你的最终程序将在 . 中命名为 prog /bin/,每次编译代码时,二进制文件都会被分开,/build/这样源代码目录就会非常整洁干净。