在makefile上指定依赖项

时间:2011-01-13 20:23:43

标签: makefile

我希望这对那里的人来说是显而易见的。我正在创建一个makefile,我需要一些特殊的编译。我有cuda文件和c ++文件,每个都需要单独编译。我希望能够指定文件,然后根据

列出最终输出的依赖关系
CUDA_FILES := file1.cu file2.cu file3.cu
CPP_FILES := file4.cpp file5.cpp

# lots of options

#rules:
all: project1

project1: file1.o file2.o file3.o file4.o file5.o
  $(LD) $(LDLIBS) $^ -o $@

%.o: %.cu
  $(CUDA) $(CUDA_ARCH) $(CUDA_OPTIONS) $(CUDA_INCLUDES) -Xcompiler "$(COMPILER OPTIONS" $^ -o $@
对于project1:行,

如何从文件列表中自动生成对象列表以指定为依赖项?

3 个答案:

答案 0 :(得分:1)

只列出目标文件而不是源文件:

$ cat Makefile
OBJS = a.o b.o

foo: a.o b.o
        $(LD) -o $@ $^
$ make
cc    -c -o a.o a.c
cc    -c -o b.o b.c
ld -o foo a.o b.o

修改:如果您不想使用此方法,请使用string substitution

OBJS = $(CUDA_FILES:%.cu=%.o) $(CPP_FILES:%.cpp=%.o)

答案 1 :(得分:0)

CUDA_FILES := $(wildcard *.cu)
CC_FILES := $(wildcard *.cpp)

OBJS := $(CUDA_FILES:.cu=.o) $(CC_FILES:.cc=.o)

答案 2 :(得分:0)

我建议使用更现代的字符串替换函数,例如:

dogCpp := dog.cpp dogSays.cpp
dogObj := $(patsubst %.cpp,%.o,${dogCpp})