我正在用C ++编写一个用于大学作业的应用程序,我需要压缩zip文件中的源文件并通过电子邮件发送给我的主管进行评估。问题是我有一个'工具箱'在一个单独的目录中,该目录包含一个自定义命名空间,该命名空间包含许多函数和类,我发现自己为每个作业重写,例如错误/健全性检查用户的输入。
是否有工具可以创建包含存储在不同位置的所有源文件的压缩文件?我的编译器能够遵循我的序言中指定的目录,所以我想在那里会有一个工具可以做到这一点。我在Linux上用C ++编写这个应用程序,并且更喜欢使用CLI工具,但如果有的话,它将适用于GUI。
答案 0 :(得分:1)
可能有,但最简单的方法是编写一个简短的脚本,将所有内容复制到一个临时目录中,然后压缩该目录。
答案 1 :(得分:1)
您可以在依赖模式下使用gcc
或cpp
。例如,cpp -MM
为C文件生成Makefile规则:
$ cpp -MM abstract.c
abstract.o: abstract.c differ.h overrides.h debug.h settings.h abstract.h \
abstract/posix.h abstract/linux.h misc.h command.h queue.h list.h \
storage.h sqlite3.h
您可以解析此输出以获取包含文件的列表。 cpp
也适用于C ++源文件,所以你应该没有问题。
但是,您应该注意提供与正常编译时相同的预处理器选项。
编辑:
由于zip
更新档案中具有相同名称的文件,您可以使用以下内容:
$ for i in *.c *.cc; do cpp -MM "$i"; done | tr ' ' '\n' | sort -u | grep -v ':$' | xargs -r zip test.zip
updating: test2.cc (deflated 61%)
adding: greater.c (deflated 38%)
adding: test.cc (deflated 61%)
adding: yyy.h (stored 0%)
adding: zzz.h (stored 0%)
$ for i in *.c *.cc; do cpp -MM "$i"; done | tr ' ' '\n' | sort -u | grep -v ':$' | xargs -r zip test.zip
updating: test2.cc (deflated 61%)
updating: greater.c (deflated 38%)
updating: test.cc (deflated 61%)
updating: yyy.h (stored 0%)
updating: zzz.h (stored 0%)
这将在zip
存档中存储指定源文件中包含的文件以及源文件本身。请注意,您必须小心,以便使用正确的cpp
选项处理每个源文件。
答案 2 :(得分:1)
zip命令将多个文件作为输入。所以你可以做到
zip project.zip my_project_dir my_toolbox_dir
如果您只想要源文件,可以
zip project.zip my_project_dir my_toolbpx_dir / * .cpp