C++ 通过ocaml和cpp扩展名生成文件

C++ 通过ocaml和cpp扩展名生成文件,c++,makefile,C++,Makefile,我在同一个目录中有大量的.ml和.cpp文件,它们彼此完全独立。是否有任何方法可以使用Makefile编译它们而不使用外部bash/shell脚本 CC=g++ CFLAGS=-Wall -std=c++14 -Wno-unused-variable CCML=ocamlc SHELL := '/bin/bash' .SUFFIXES = .cpp .ml cpp_objs:=$(wildcard *.cpp) ml_objs:=$(wildcard *.ml) cpp_targets:=$(

我在同一个目录中有大量的
.ml
.cpp
文件,它们彼此完全独立。是否有任何方法可以使用
Makefile
编译它们而不使用外部bash/shell脚本

CC=g++
CFLAGS=-Wall -std=c++14 -Wno-unused-variable
CCML=ocamlc
SHELL := '/bin/bash'
.SUFFIXES = .cpp .ml

cpp_objs:=$(wildcard *.cpp)
ml_objs:=$(wildcard *.ml)
cpp_targets:=$(cpp_objs:.cpp= )
ml_targets:=$(ml_objs:.ml= )

targets:=$(cpp_targets) $(ml_targets)

.PHONY:all
all: $(targets) 
# all: $(cpp_targets) 
.ml: 
    $(CCML) -o $@ $<
.cpp:
    $(CC) $(CFLAGS) -o $@ $< 
更新:所有
*.ml
*.cpp
文件在目录中都有唯一的名称

谢谢。

根据您应该配置的
。后缀像目标,而不是变量:

.SUFFIXES: .cpp .ml
但是,更好的方法是使用模式规则,这样就可以完全放弃使用
。后缀

%: %.ml
    $(CCML) -o $@ $<
%:%.ml
$(CCML)-o$@$<
根据您应该配置的
。后缀类似于目标,而不是变量:

.SUFFIXES: .cpp .ml
但是,更好的方法是使用模式规则,这样就可以完全放弃使用
。后缀

%: %.ml
    $(CCML) -o $@ $<
%:%.ml
$(CCML)-o$@$<

make
调用与此错误对应的是什么?什么是
ML-FILES
?假设我在目录中有
a.ML
,它会大叫
make:**没有规则将目标设为a',所有人都需要'。停止。
make
调用与此错误对应的是什么?什么是
ML-FILES
?假设我在目录中有
a.ML
,它会大叫
make:**没有规则将目标设为a',所有人都需要'。停止。