返工使文件将obj放入不同的位置

时间:2014-09-26 04:37:50

标签: c++ linux makefile

下面是我的makefile

# Location of the CUDA Toolkit
CUDA_PATH  ?= /usr/local/cuda-6.0
NVCC := $(CUDA_PATH)/bin/nvcc -ccbin g++
APP := app
OBJ := obj

source_files = $(shell find ./src -type f -regex '.*\.\(c\|cu\|cpp\)' | sed 's/^\.\/src\///')
obj_files = $(patsubst .c,obj/.o,$(patsubst .cpp,obj/.o,$(patsubst .cu,obj/.o,$(source_files))))

vpath %.c ./src/
vpath %.cpp ./src/
vpath %.cu ./src/

# Target rules
all: exe

%.o: %.cu
    -mkdir -p $(dir $@)
    $(NVCC) $+ -c -o $@

exe: $(obj_files)
    $(NVCC) $^ -o $(APP)

run: exe
    ./$(APP)

clean:
    rm -f $(APP) obj/*.o

clobber: clean

我有两个问题:

1)如何让makefile与cpp,c和cu文件一起使用 现在,我有

%.o: %.cu
    -mkdir -p $(dir $@)
    $(NVCC) $+ -c -o $@

但是,我想要那样的东西

%.o: %.cu, %.cpp, %.c
    -mkdir -p $(dir $@)
    $(NVCC) $+ -c -o $@

2)我如何将obj放入不同的位置。在我的makefile中,我有变量$(OBJ)= obj,我想把目标文件放到这个目录中。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

1)您需要三个单独的规则。 2)这并不困难,但是如果目标的名称不是规则实际产生的,那么你可能会遇到麻烦,所以拼出来。

我不习惯使用cuda代码,所以我假设您的配方可以使用C或C ++代码编写。

$(OBJ)/%.o: %.cu
    -mkdir -p $(dir $@)
    $(NVCC) $+ -c -o $@

$(OBJ)/%.o: %.cpp
    -mkdir -p $(dir $@)
    $(NVCC) $+ -c -o $@

$(OBJ)/%.o: %.c
    -mkdir -p $(dir $@)
    $(NVCC) $+ -c -o $@