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

问题描述 投票:0回答:1

我在同一目录中具有大量彼此完全独立的.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 $@ $< 

仅识别我的Makefile文件的.cpp有什么问题:

make: *** No rule to make target `[ML-FILES]', needed by `all'.  Stop.

更新:所有*.ml*.cpp文件在目录中都有唯一的名称。

谢谢。

c++ makefile
1个回答
2
投票

根据the manual,您应该将.SUFFIXES配置为目标,而不是变量:

.SUFFIXES: .cpp .ml

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

%: %.ml
    $(CCML) -o $@ $<
© www.soinside.com 2019 - 2024. All rights reserved.