【问题标题】:How to make a makefile that will compile C, C++, and Java files all at once如何制作一个同时编译 C、C++ 和 Java 文件的 makefile
【发布时间】:2012-01-16 08:20:23
【问题描述】:

我正在尝试创建一个 Makefile,它将一次编译并运行 3 个不同的马尔可夫算法实现。我是makefile的新手,所以如果有多个错误,请告诉我。另外,如果我想用 -O3 优化编译,我会在哪里做呢?

当我运行时,我目前收到以下错误:

Makefile:28:警告:覆盖目标“markov.o”的命令

Makefile:22:警告:忽略目标“markov.o”的旧命令

make: * 没有规则来制作目标Markov.java', needed byjava_markov.class'。停下来。

这是我的 makefile 的代码:

javaC=javac
javaR=java
CC=g++
CC=gcc

CFLAGS=-O0
OPT=-deprecation
TARGET1=./java_markov
TARGET2=./markov_cpp
TARGET3=./markov_c
INFILE=./alice30.txt
OUTFILE1=./markov_java_out.txt
OUTFILE2=./output/markov_cpp_out.txt
OUTFILE3=./output/markov_c_out.txt

$(TARGET1).class: Markov.java
    $(javaC) Markov.java

$(TARGET2): markov.o
    $(CC) $(CFLAGS) -o $(TARGET2) markov.o
markov.o: markov.cpp
    $(CC) $(CFLAGS) -c markov.cpp


$(TARGET3) : markov.o eprintf.o
    $(CC) $(CFLAGS) -o $(TARGET3) markov.o eprintf.o
markov.o : markov.c
    $(CC) $(CFLAGS) -c markov.c
eprintf.o : eprintf.c eprintf.h
    $(CC) $(CFLAGS) -c eprintf.c

clean:
    rm -f *.class $(OUTFILE1)
    rm -f *.o $(TARGET2) $(OUTFILE2)
    rm -f *.o $(TARGET3) $(OUTFILE3)
run: $(TARGET1).class
    $(javaR) $(TARGET1) < $(INFILE) > $(OUTFILE1)
    $(TARGET2)
    $(TARGET2) <$(INFILE) >$(OUTFILE2)
    $(TARGET3)
    $(TARGET3) < $(INFILE) > $(OUTFILE3)

【问题讨论】:

  • 第 4 行,您将 CC 设置为 gcc(GNU 编译器集合),然后将其设置为 g++。在我的计算机上对 .cpp 文件使用 gcc 不起作用,因为它最终运行 C 编译器。尝试在 .c 源上为 gcc 使用一个变量,在 .cpp 源上为 g++ 使用另一个变量
  • 为什么这必须是一个make文件?为 C 和 C++ 版本创建一个 make 文件,然后在 shell 或 python 脚本中运行。

标签: java c++ c makefile


【解决方案1】:
  • 确实有两条规则可以制定markov.o。如果您在同一文件夹中确实有 C 和 C++ 端口,请尝试重命名其中一个:例如

    markov-c++.o: markov.cpp
    $(TARGET2): markov-c++.o …
    
  • 如果您不再链接.o 文件,您真的没有 使用带有中间.o 文件的两步编译。你可以这样做

    $(TARGET2): markov.cpp
        $(CC) $(CFLAGS) markov.cpp -o $(TARGET2)
    
  • 另一个警告表明目录中没有名为Markov.java 的文件。它可能在子目录中还是什么?

  • make run 非常糟糕 :-) 我认为您只是想将所有三个目标都放在先决条件行中?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多