生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
Generate a Makefile that compiles and links all the source files in a single step with Automake
我是自动制作的新手。我正在尝试为我的库编写 Makefile.am 文件,但是由于 nvcc 编译器的一些限制,我需要在一个步骤中编译和链接源文件,而不生成 .o 文件,以便我直接生成库而无需链接单独的文件。我可以在网上找到几个 Makefile.am 文件的例子,但似乎没有一个符合我的需求。这是我的(工作(制作文件:
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 才能生成这样的生成文件?
我问题的正确答案是Sam Varshavchik写的:正如他所指出的,这是不可能的。但是,对于任何可能感兴趣的人,我找到了一种解决方法来解决我的问题,例如,如果您想使用 Autotools 构建 CUDA-C/C++ 共享库,则很有用。
诀窍是首先使用autotools生成src/Makefile.in文件,然后在make命令之前修改此文件。 对于我的 autoconf/automake 版本,相关行是:
$(AM_V_CXXLD)$(libexample_la_LINK) ...
这应该替换为以下内容:
nvcc -ccbin=g++ --compiler-options '-O3 -Wall -fPIC' -shared -arch sm_30 --ptxas-options=-v --relocatable-device-code true -o source-files -lm
其中 libexample 是库的名称,源文件是要编译的文件列表。 请注意:该行前面有一个制表符,而不是空格。 如果您希望能够使用"make install",则还应修改在正确文件夹中安装库的命令。就我而言:
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)";
"$$list 2"应改为"libexample.so">
此补丁可以通过在配置脚本结束时启动的 shell 脚本自动完成。 我在 https://github.com/golosio/sharedcuda_autotools 中放置了一个完整的工作示例
相关文章:
- 挂起和取消挂起一个文件DLL
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何将class.cpp和class.hpp编译为一个.o文件
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 如何从整个磁盘中排除要装载的一个文件
- 如何将模板和非模板函数放在一个文件中
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 使用 scope 运算符 (::) 引用另一个文件中的类
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 为什么我不能从同一目录中的另一个文件中 #include 我的类?
- 在 c++ 中打开文件、删除标点符号并追加到另一个文件中
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- c++ 提升如果 .extension() == " "这意味着这个文件是一个文件夹?
- 是否可以在 c++ 中创建一个文件并为其提供属性以将其隐藏?(在 Ubuntu 上)
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 如何在标准c ++中流式传输/读取二进制文件的中间部分并写入另一个文件?