c++ - 返工 make 文件以将 obj 放入不同的位置

标签 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) 您将需要三个单独的规则。 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 $@

关于c++ - 返工 make 文件以将 obj 放入不同的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26052143/

相关文章:

带有外部 h 和 o 文件的 c++ Makefile

c - "Undefined reference to main"与 main 在单独的脚本/规则中

c++ - 如何排序类和友元函数的定义和声明?

linux - 在 Linux 上重新扫描 LUN

linux - 如何查找所有以/filesystem开头的文件系统

c - 在 linux 中用 c 代替 getch 和 clrscr()

makefile - 使用 GNU-make 函数检查是否定义了变量

c++ - Qt Phonon MediaObject 转换错误

c++ - OpenCV - 禁用打印异常

c++ - Qt Creator 问题。构建项目时未显示 UI 更改