Cyven's Braindump

is make work only for c/cpp?

结论是:不是

因为 make 诞生于 70 年代的 C 语言开发环境,并因此在 C/C++ 领域最为流行

理论上 make 可以用于管理任何可以通过命令行执行编译,链接的项目,比如编译型语言 Java,Rust等

但是往往后者有专属于自己的高级的构建工具,比如 maven, gradle,cargo

但不是不可以.

java项目使用make构建demo

项目目录:

  my-java-project/
├── src/
│   └── com/
│       └── example/
│           ├── Main.java
│           └── Utils.java
├── Makefile
└── bin/          (构建后生成的字节码)

Makefile 文件:

  # 定义变量
JC = javac
JVM = java
JAR = jar
BIN_DIR = bin
SRC_DIR = src
MAIN_CLASS = com.example.Main
TARGET_JAR = MyProgram.jar

# 默认目标
all: compile

# 1. 编译规则
# 它会寻找所有 .java 文件,并编译到 bin 目录下
compile:
        @echo "正在编译 Java 源文件..."
        @mkdir -p $(BIN_DIR)
        $(JC) -d $(BIN_DIR) $(SRC_DIR)/com/example/*.java

# 2. 运行规则
# 依赖于 compile,确保运行前是最新的代码
run: compile
        @echo "正在启动程序..."
        @$(JVM) -cp $(BIN_DIR) $(MAIN_CLASS)

# 3. 打包规则
# 将编译好的 .class 文件打包成可执行的 JAR
jar: compile
        @echo "正在生成 JAR 文件..."
        $(JAR) cfe $(TARGET_JAR) $(MAIN_CLASS) -C $(BIN_DIR) .

# 4. 清理规则
clean:
        @echo "清理构建文件..."
        rm -rf $(BIN_DIR) *.jar

.PHONY: all compile run jar clean

执行 make && make run 也是可以的

Links to this note