Home > Net >  Mult-output files with Makefile
Mult-output files with Makefile

Time:10-11

I am a cuda programmer and new in vscode and Makefile environment. For a better programming, I use multiple .cu files for my functions. Thus, for the pull_model and build_meshgrid functions, the makefile becomes:

# Target rules
all: build

build: kernel

check.deps:
ifeq ($(SAMPLE_ENABLED),0)
    @echo "Launch file will be waived due to the above missing dependencies"
else
    @echo "Launch file is ready - all dependencies have been met"
endif

kernel: kernel.o Engine/Engine.o Engine/pull_model.o Engine/build_meshgrid.o
    $(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $  $(LIBRARIES)
    $(EXEC) mkdir -p bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)
    $(EXEC) cp $@ bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)

%.o: %.cu
    $(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<
    
run: build
    $(EXEC) ./kernel

testrun: build

clean:
    rm -f kernel *.o Engine/*.o
    rm -rf bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)/kernel

clobber: clean

I need to reduce the kernel somehow, like this:

kernel: kernel.o Engine/*.o
    $(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $  $(LIBRARIES)
    $(EXEC) mkdir -p bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)
    $(EXEC) cp $@ bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)

So, all .cu files under Engine folder are targed.

Best Regards!

CodePudding user response:

Well, you can't use Engine/*.o because when you run your makefile, no object files exist and so this wildcard will expand to nothing, then nothing will be built (except kernel.o).

It's a catch-22 because you can't just tell make "build all the object files that you would build if you knew which objects to build!"

If what you want is to build object files for all source files in the Engine directory, you can tell make to do that:

SRCS := $(wildcard Engine/*.c)
OBJS := $(SRCS:%.c=%.o)

kernel: kernel.o $(OBJS)
         ....
  • Related