【发布时间】:2020-02-15 18:13:43
【问题描述】:
我是 automake 的新手。我正在尝试为我的库编写 Makefile.am 文件,但是由于 nvcc 编译器的一些限制,我需要一步编译和链接源文件,而不生成 .o 文件,以便我直接生成库,而无需链接单独的文件。我可以在网上找到几个 Makefile.am 文件的示例,但似乎没有一个适合我的需要。这是我的(工作)Makefile:
CC=g++
NVCC=nvcc
CXXFLAGS= -O3 -Wall -fPIC
CUDAFLAGS= -arch sm_30 --ptxas-options=-v --relocatable-device-code true
LIBS= -lm
LDFLAGS = -shared # linking flags
RM = rm -f # rm command
TARGET_LIB = ./lib/libsharedcuda.so # target lib
SRC_DIR = src
SRC_FILES = $(wildcard $(SRC_DIR)/*.cu)
SRC_FILES += $(wildcard $(SRC_DIR)/*.cpp)
H_FILES = $(wildcard $(SRC_DIR)/*.h)
H_FILES += $(wildcard $(SRC_DIR)/*.cuh)
.PHONY: all
all: ${TARGET_LIB}
$(TARGET_LIB): $(SRC_FILES)
$(NVCC) -ccbin=${CC} --compiler-options '${CXXFLAGS}' ${CUDAFLAGS} ${LDFLAGS} -o $@ $^
.PHONY: clean
clean:
-${RM} ${TARGET_LIB}
应该如何编写 Makefile.am 以生成像这样的 makefile?
【问题讨论】:
-
你不能。 automake 的全部目的是从一个简洁、紧凑的定义生成库存 Makefile,并且 automake 假定一个通用编译器和一个相当通用的 make 命令。对于这种非常自定义的情况,您将自己编写 Makefile,从头开始。
-
感谢您的回答,它为我节省了大量时间寻找不可行的解决方案。我找到了解决我的问题的方法,首先使用自动工具生成 Makefile.in 文件,然后使用在配置结束时启动的脚本向该文件应用补丁。有点棘手,但它奏效了。