可以有一个包含 .c 和 .cu 文件的混合 makefile 吗?如果是这样,如何?
Can one have a mixed makefile with .c and and .cu files? if so, how?
我目前有一个编译 OpenACC 的 makefile,我想知道我是否可以让它也支持 .cu
我当前的 makefle:
LDFLAGS += -Ldcmt0.4/lib -ldcmt
include Makefile.include
HW1_INCS = black_scholes.h gaussian.h parser.h random.h timer.h util.h
HW1_C_SRCS = black_scholes.c gaussian.c main.c parser.c random.c dcmt0.4/lib/random_seed.c timer.c util.c
HW1_C_OBJS = $(HW1_C_SRCS:.c=.o)
HW1_EXE = hw1.x
all: hw1.x
%.o: %.c
$(CC) -c $(CCFLAGS) $(ACCFLAGS) $< -o $@
hw1.x: $(HW1_C_OBJS) dcmt0.4/lib/libdcmt.a
$(CC) $(LDFLAGS) $(HW1_C_OBJS) -o $@
dcmt0.4/lib/libdcmt.a:
make -C dcmt0.4/lib
black_scholes.o: black_scholes.c black_scholes.h gaussian.h random.h util.h
gaussian.o: gaussian.c gaussian.h util.h
main.o: main.c black_scholes.h parser.h random.h timer.h
parser.o: parser.c parser.h
random.o: random.c random.h
dcmt0.4/lib/random_seed.o: dcmt0.4/lib/random_seed.c
timer.o: timer.c timer.h
util.o: util.c util.h
clean:
make -C dcmt0.4/lib clean
rm -f $(HW1_C_OBJS) $(HW1_EXE)
Makefile.include:
CC = nvc
LINKER = nvc
LDFLAGS = -lm
我计划将 Cuda 包含在 black_scholes.c 中,这样它将变成 black_scholes.cu,同时保留其他内容。但是,我不确定我是否可以在单个 makefile 中执行此操作,而且我是新手。
例如,HW1_C_SRCS
和HW1_C_OBJS
包含.c
扩展名,但我必须将black_scholes更改为.c
同样,编译器标志也会有机会,任何指导将不胜感激
请找到以下代码,您可以在同一个 makefile 中使用这些代码来编译所有文件(.c 和 .cu)。
LDFLAGS += -Ldcmt0.4/lib -ldcmt
include Makefile.include
HW1_INCS = black_scholes.h gaussian.h parser.h random.h timer.h util.h
# Add your .c files here
HW1_C_SRCS = gaussian.c main.c parser.c random.c
# Add your .cu files here
HW1_CUDA_SRCS = black_scholes.cu
HW1_C_OBJS = $(HW1_C_SRCS:.c=.o)
HW1_CUDA_OBJS = $(HW1_CUDA_SRCS:.cu=.o)
HW1_EXE = hw1.x
all: hw1.x
%.o: %.c
$(CC) -c $(CCFLAGS) $(ACCFLAGS) $< -o $@
%.o: %.cu
# Here you can also put a variable CUDAFLAGS instead of CCFLAGS if you want to pass
# different compiler flags to .cu file. You can define the variable CUDAFLAGS in makefile.include
$(CC) -c $(CCFLAGS) $(ACCFLAGS) $< -o $@
hw1.x: $(HW1_C_OBJS) $(HW1_CUDA_OBJS) dcmt0.4/lib/libdcmt.a
$(CC) $(LDFLAGS) $(HW1_C_OBJS) $(HW1_CUDA_OBJS) -o $@
dcmt0.4/lib/libdcmt.a:
make -C dcmt0.4/lib
black_scholes.o: black_scholes.cu black_scholes.h gaussian.h random.h util.h
gaussian.o: gaussian.c gaussian.h util.h
main.o: main.c black_scholes.h parser.h random.h timer.h
parser.o: parser.c parser.h
random.o: random.c random.h
dcmt0.4/lib/random_seed.o: dcmt0.4/lib/random_seed.c
timer.o: timer.c timer.h
util.o: util.c util.h
clean:
make -C dcmt0.4/lib clean
rm -f $(HW1_C_OBJS) $(HW1_CUDA_OBJS) $(HW1_EXE)
请注意:这只是帮助您入门的示例。
运行 :
全部
我目前有一个编译 OpenACC 的 makefile,我想知道我是否可以让它也支持 .cu
我当前的 makefle:
LDFLAGS += -Ldcmt0.4/lib -ldcmt
include Makefile.include
HW1_INCS = black_scholes.h gaussian.h parser.h random.h timer.h util.h
HW1_C_SRCS = black_scholes.c gaussian.c main.c parser.c random.c dcmt0.4/lib/random_seed.c timer.c util.c
HW1_C_OBJS = $(HW1_C_SRCS:.c=.o)
HW1_EXE = hw1.x
all: hw1.x
%.o: %.c
$(CC) -c $(CCFLAGS) $(ACCFLAGS) $< -o $@
hw1.x: $(HW1_C_OBJS) dcmt0.4/lib/libdcmt.a
$(CC) $(LDFLAGS) $(HW1_C_OBJS) -o $@
dcmt0.4/lib/libdcmt.a:
make -C dcmt0.4/lib
black_scholes.o: black_scholes.c black_scholes.h gaussian.h random.h util.h
gaussian.o: gaussian.c gaussian.h util.h
main.o: main.c black_scholes.h parser.h random.h timer.h
parser.o: parser.c parser.h
random.o: random.c random.h
dcmt0.4/lib/random_seed.o: dcmt0.4/lib/random_seed.c
timer.o: timer.c timer.h
util.o: util.c util.h
clean:
make -C dcmt0.4/lib clean
rm -f $(HW1_C_OBJS) $(HW1_EXE)
Makefile.include:
CC = nvc
LINKER = nvc
LDFLAGS = -lm
我计划将 Cuda 包含在 black_scholes.c 中,这样它将变成 black_scholes.cu,同时保留其他内容。但是,我不确定我是否可以在单个 makefile 中执行此操作,而且我是新手。
例如,HW1_C_SRCS
和HW1_C_OBJS
包含.c
扩展名,但我必须将black_scholes更改为.c
同样,编译器标志也会有机会,任何指导将不胜感激
请找到以下代码,您可以在同一个 makefile 中使用这些代码来编译所有文件(.c 和 .cu)。
LDFLAGS += -Ldcmt0.4/lib -ldcmt
include Makefile.include
HW1_INCS = black_scholes.h gaussian.h parser.h random.h timer.h util.h
# Add your .c files here
HW1_C_SRCS = gaussian.c main.c parser.c random.c
# Add your .cu files here
HW1_CUDA_SRCS = black_scholes.cu
HW1_C_OBJS = $(HW1_C_SRCS:.c=.o)
HW1_CUDA_OBJS = $(HW1_CUDA_SRCS:.cu=.o)
HW1_EXE = hw1.x
all: hw1.x
%.o: %.c
$(CC) -c $(CCFLAGS) $(ACCFLAGS) $< -o $@
%.o: %.cu
# Here you can also put a variable CUDAFLAGS instead of CCFLAGS if you want to pass
# different compiler flags to .cu file. You can define the variable CUDAFLAGS in makefile.include
$(CC) -c $(CCFLAGS) $(ACCFLAGS) $< -o $@
hw1.x: $(HW1_C_OBJS) $(HW1_CUDA_OBJS) dcmt0.4/lib/libdcmt.a
$(CC) $(LDFLAGS) $(HW1_C_OBJS) $(HW1_CUDA_OBJS) -o $@
dcmt0.4/lib/libdcmt.a:
make -C dcmt0.4/lib
black_scholes.o: black_scholes.cu black_scholes.h gaussian.h random.h util.h
gaussian.o: gaussian.c gaussian.h util.h
main.o: main.c black_scholes.h parser.h random.h timer.h
parser.o: parser.c parser.h
random.o: random.c random.h
dcmt0.4/lib/random_seed.o: dcmt0.4/lib/random_seed.c
timer.o: timer.c timer.h
util.o: util.c util.h
clean:
make -C dcmt0.4/lib clean
rm -f $(HW1_C_OBJS) $(HW1_CUDA_OBJS) $(HW1_EXE)
请注意:这只是帮助您入门的示例。
运行 :
全部