【问题标题】:GNU Makefile uses the same source file for all object filesGNU Makefile 对所有目标文件使用相同的源文件
【发布时间】:2021-10-25 23:03:11
【问题描述】:

文件结构:

cpp
|   Makefile
|
|   obj
|___include
|   |   a.cuh
|   |   b.cuh
|   |   c.cuh
|
|___src
|   |   a.cu
|   |   b.cu
|   |   c.cu

我对 GNU make 没有太多经验。以下是根据 Stackoverflow 上的不同搜索结果编写的。 $@ 变量正确地从列表中获取每个目标文件的名称,但是 $< 变量仅获取源文件名列表中的第一项(根据手册,但这就是所有堆栈溢出的答案我发现正在使用123)。

NVCC=nvcc

LIB       = lib.dll

SRC_DIR   = src
INC_DIR   = include
OBJ_DIR   = obj

CU_FILES  = $(wildcard $(SRC_DIR)/*.cu)

CUH_FILES = $(wildcard $(INC_DIR)/*.cuh)

CUO_FILES = $(addprefix $(OBJ_DIR)/,$(notdir $(CU_FILES:.cu=.obj)))

$(LIB): $(CUO_FILES)
    $(NVCC) --shared $^ -o $@

$(CUO_FILES): $(CU_FILES) $(CUH_FILES)
    $(NVCC) -dc $< -o $@

【问题讨论】:

    标签: makefile dependencies header-files nvcc


    【解决方案1】:

    你写的可能不是你想要的。你的规则:

    $(CUO_FILES): $(CU_FILES) $(CUH_FILES)
        $(NVCC) -dc $< -o $@
    

    表示每个目标文件依赖于所有源文件所有头文件

    你需要的是一个pattern ruleobj/foo.obj 依赖于src/foo.cuinclude/foo.cuh

    obj/%.obj: src/%.cu include/%.cuh
        $(NVCC) -dc $< -o $@
    

    请注意,您可以稍微简化一下CUO_FILES 的赋值:

    CUO_FILES = $(patsubst $(SRC_DIR)/%.cu,$(OBJ_DIR)/%.obj,$(CU_FILES))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多