Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 学习如何使用GNU自动工具打包我的程序时遇到问题_C_Linux_Gnu_Autotools - Fatal编程技术网

C 学习如何使用GNU自动工具打包我的程序时遇到问题

C 学习如何使用GNU自动工具打包我的程序时遇到问题,c,linux,gnu,autotools,C,Linux,Gnu,Autotools,我第一次尝试使用GNU自动工具来打包我的C程序MyShell。我试过两次,但都失败了。我遵循了,但我的程序不同之处以及导致问题的原因(我认为)是有1个.h文件和5个.c文件,而本教程只使用一个.c文件 以下是我的程序的文件结构: MyShell/ 自述 src/ src/ 命令执行者 CommandReader.c 叉形发射器 Main.c 我的地狱 MyShellLoop.c 如果您能提供关于如何编写Makefile.am文件、configure.ac文件等的任何指导,或者提供关于如何

我第一次尝试使用GNU自动工具来打包我的C程序MyShell。我试过两次,但都失败了。我遵循了,但我的程序不同之处以及导致问题的原因(我认为)是有1个
.h
文件和5个
.c
文件,而本教程只使用一个
.c
文件

以下是我的程序的文件结构:

MyShell/

  • 自述
  • src/
src/

  • 命令执行者
  • CommandReader.c
  • 叉形发射器
  • Main.c
  • 我的地狱
  • MyShellLoop.c
如果您能提供关于如何编写Makefile.am文件、configure.ac文件等的任何指导,或者提供关于如何为更复杂的程序使用自动工具的更详细教程,我们将不胜感激

编辑

以下是我使用的文件:

MyShell/src/Makefile.am

bin_PROGRAMS = MyShell
MyShell_SOURCES = Main.c
SUBDIRS = src
dist_doc_DATA = README
MyShell/Makefile.am

bin_PROGRAMS = MyShell
MyShell_SOURCES = Main.c
SUBDIRS = src
dist_doc_DATA = README
MyShell/configure.ac

AC_INIT([MyShell], [1.0], [<my email address>])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
AC_OUTPUT
我是否应该将
config.h
替换为
MyShell.h

MyShell_SOURCES = Main.c
这似乎是错误的。您需要列出所有源文件

我是否应该将
config.h
替换为
MyShell.h

MyShell_SOURCES = Main.c

否。
config.h
应该由
configure
脚本从
config.h.in
文件中生成。“How”可以是漂亮的。

很复杂。您是否正在调整您的程序,使其能够在多种不同的系统类型上编译?如果是这样,您需要一个单独的
config.h
文件,该文件将由客户端计算机上的
configure
脚本生成,自动工具将根据您指定的信息创建配置脚本(etc)。如果你不需要配置你的程序,那么使用AutoTools可能是杀伤力太大了。@JonathanLeffler将来我希望它能在不同的系统上运行,但现在它只需要在Linux上运行。这是一项任务,我们被要求使用Autotools进行打包,或者“编写您自己的Makefile并创建tar.gz Maualy”。在这两者之间,我每次都会使用手动编写的Makefile—这并不是那么难(尽管干净地完成这项任务并不十分简单)。然而,练习是练习,提供了一种学习体验。我有几个自动配置的程序,其中一个也使用了
automake
——但我很久以前就做过自动配置(从修订历史来看,2007年)。我有足够的时间来忘记细节(并从系统给我造成的创伤中恢复过来)。好吧,只列出一个逗号分隔的列表是有意义的?此外,我需要将此作为大学作业提交,课程名称必须采用xxxx\U xxxx格式。我可以在Makefiles和configure文件中将任何“MyShell”替换为“xxxx\u xxxx”吗?或者这会不会在
xxxx\u xxxx\u Sources=MyShell.h,Main.c…
?好的,这应该没问题。等等,不是逗号分隔的。。。空格分隔。。就像在我发布的链接中一样。谢谢,我现在要再试一次