如何生成一个在 c 中依次运行多个程序的 makefile?
How to produce a makefile that runs multiple programs after each other in c?
我写了两个程序。第一个程序 ProgramOne 为第二个程序 ProgramTwo 创建输入文件(这两个程序没有共同的文件,ProgramOne 编写的输出只是 ProgramTwo 的输入)。有时 运行 执行第一个程序需要一些时间,但有时只需要几秒钟,具体取决于我模拟的维度。
因此,我想将所有文件放入一个文件夹中,并创建一个能够向 运行:
发出命令的 makefile
- 程序一
- 程序二
- 两个节目紧接着
前两个并不难写,但是第三个是问题(所以目前我可以运行 ProgramOne,然后运行 ProgramTwo,这需要我两个终端中的命令,但在某些情况下我也想使用这个命令)。我如何向编译器表明我希望两个程序依次执行。
目前我有一个相当标准的 makefile,但我写了以下内容:
(注意 programone.c 包含一个主函数,而且只有一个主函数,不依赖于 SRCS(ProgramTwo 的文件)中的任何内容)
(另一个重要说明:对于运行 ProgramTwo,我需要指定一些参数。在终端中我会写:./RunProgramTwo -v results
。如何每当我想 运行 这两个程序彼此相继时,我需要指定这些参数?)
(我还遗漏了一些东西,比如 clean 和 distclean 命令,但我认为它们与这种情况无关。但是,如果你这么认为,我会根据要求提供完整的 makefile)
NVCC = nvcc
NVCFLAGS = -arch=sm_30
CFLAGS = -Wall -pedantic -g
LDLIBS = -lz -lpthread
SRCS := allfiles.c
OBJS := allfiles.o
all: .depend RunProgramOne RunProgramTwo RunAll
RunProgramOne: $ programone.o
${NVCC} ${NVCFLAGS} ${LDLIBS} $^ -o $@
RunProgramTwo: ${OBJS} main.o
${NVCC} ${NVCFLAGS} ${LDLIBS} $^ -o $@
RunAll: RunProgramOne RunProgramTwo
depend:
${NVCC} -M ${SRCS} > .depend
.depend: ${SRCS} makefile
${NVCC} -M ${SRCS} > .depend
这似乎无法完成工作,因为当我调用 ./RunAll.
时,我只是得到了 ProgramTwo 运行ning
请注意,我目前正在考虑将我的两个程序相互分离的解决方案。我还能够将 ProgramOne 中的主函数变成一个函数,然后我在 ProgramTwo 的主函数的最开始调用它。这样,我可以很容易地为我的第三个选项生成一个 makefile 命令,即 RunAll,但是我不知道如何实现前两个。
我更喜欢一个解决方案,使我的两个程序分离,但如果这不可能,请随时告诉我任何可行的方法。
我已经查了makefile的基本资料(简单教程),也看了makefile本身的手册,但是好像没有找到解决方法。
非常感谢任何帮助。
这个目标没有 运行 任何东西:它只是声明先决条件,但你没有配方(配方是传递给 shell 并执行的东西):
RunAll: RunProgramOne RunProgramTwo
如果您希望此目标成为 运行 程序,您必须编写一个执行此操作的方法:
RunAll: RunProgramOne RunProgramTwo
./RunProgramOne
./RunProgramTwo
我写了两个程序。第一个程序 ProgramOne 为第二个程序 ProgramTwo 创建输入文件(这两个程序没有共同的文件,ProgramOne 编写的输出只是 ProgramTwo 的输入)。有时 运行 执行第一个程序需要一些时间,但有时只需要几秒钟,具体取决于我模拟的维度。
因此,我想将所有文件放入一个文件夹中,并创建一个能够向 运行:
发出命令的 makefile- 程序一
- 程序二
- 两个节目紧接着
前两个并不难写,但是第三个是问题(所以目前我可以运行 ProgramOne,然后运行 ProgramTwo,这需要我两个终端中的命令,但在某些情况下我也想使用这个命令)。我如何向编译器表明我希望两个程序依次执行。
目前我有一个相当标准的 makefile,但我写了以下内容:
(注意 programone.c 包含一个主函数,而且只有一个主函数,不依赖于 SRCS(ProgramTwo 的文件)中的任何内容)
(另一个重要说明:对于运行 ProgramTwo,我需要指定一些参数。在终端中我会写:./RunProgramTwo -v results
。如何每当我想 运行 这两个程序彼此相继时,我需要指定这些参数?)
(我还遗漏了一些东西,比如 clean 和 distclean 命令,但我认为它们与这种情况无关。但是,如果你这么认为,我会根据要求提供完整的 makefile)
NVCC = nvcc
NVCFLAGS = -arch=sm_30
CFLAGS = -Wall -pedantic -g
LDLIBS = -lz -lpthread
SRCS := allfiles.c
OBJS := allfiles.o
all: .depend RunProgramOne RunProgramTwo RunAll
RunProgramOne: $ programone.o
${NVCC} ${NVCFLAGS} ${LDLIBS} $^ -o $@
RunProgramTwo: ${OBJS} main.o
${NVCC} ${NVCFLAGS} ${LDLIBS} $^ -o $@
RunAll: RunProgramOne RunProgramTwo
depend:
${NVCC} -M ${SRCS} > .depend
.depend: ${SRCS} makefile
${NVCC} -M ${SRCS} > .depend
这似乎无法完成工作,因为当我调用 ./RunAll.
时,我只是得到了 ProgramTwo 运行ning请注意,我目前正在考虑将我的两个程序相互分离的解决方案。我还能够将 ProgramOne 中的主函数变成一个函数,然后我在 ProgramTwo 的主函数的最开始调用它。这样,我可以很容易地为我的第三个选项生成一个 makefile 命令,即 RunAll,但是我不知道如何实现前两个。
我更喜欢一个解决方案,使我的两个程序分离,但如果这不可能,请随时告诉我任何可行的方法。
我已经查了makefile的基本资料(简单教程),也看了makefile本身的手册,但是好像没有找到解决方法。
非常感谢任何帮助。
这个目标没有 运行 任何东西:它只是声明先决条件,但你没有配方(配方是传递给 shell 并执行的东西):
RunAll: RunProgramOne RunProgramTwo
如果您希望此目标成为 运行 程序,您必须编写一个执行此操作的方法:
RunAll: RunProgramOne RunProgramTwo
./RunProgramOne
./RunProgramTwo