【问题标题】:GCC Compiler: Compile Multiple files with different output file namesGCC编译器:编译具有不同输出文件名的多个文件
【发布时间】:2015-02-05 13:33:17
【问题描述】:

是否可以编译多个文件并以不同名称保存每个文件的输出?我只是将 .cpp 文件从旧计算机复制到我的新计算机。这些程序都没有错误并且经过测试。所以现在我必须编译每个文件以获取输出文件。大约有 310 个程序,所以真的很难分别编译每个文件。我通常用相同的文件名保存输出文件,没有任何扩展名。有没有办法编译目录中的所有文件并单独保存每个文件输出。我很期待这样的命令

gcc *.cpp -o *  

如果有文件,

文件名1.cpp

filename2.cpp 等

我想得到这样的输出文件:

文件名1

文件名2等

编辑:

有什么办法可以将.cpp文件的时间戳保存到输出文件.??

【问题讨论】:

  • 在命令行试试这个:for file in *.cpp; do g++ -o ${file%*.cpp} $file; done
  • @Galik 谢谢。它奏效了。
  • @Galik 我已经发布了您的评论作为答案。
  • TBH @prajmus 的答案和我基本一样,只是转换文件名的方式略有不同。

标签: c++ linux gcc compilation output


【解决方案1】:

如果每个文件都应该有自己的可执行文件并且它们都在同一个目录中,你可以这样做:

for i in *.cpp; do g++ $i -o `basename $i .cpp`; done

添加时间戳:

for i in *.cpp; do g++ $i -std=c++11 -o `basename $i .cpp`-`date +%Y%m%d -r $i`; done

这将在文件名和连字符之后生成 YYYYMMDD 格式的日期

更改修改日期:

for i in *.cpp; do g++ $i -std=c++11 -o `basename $i .cpp`; touch -t `date +%Y%m%d%H%M -r $i` `basename $i .cpp`; done

【讨论】:

  • 您忘记了 -Wall -Wextra -g 标记为 g++
  • @BasileStarynkevitch 这只是一个例子
  • @prajmus 有没有办法将.cpp的时间戳保存到输出文件中。
  • @prajmus .cpp 最后修改时间戳。
  • @我不想要带有文件名的 YYYYMMDD,而是当我使用 ls -ltr 时,我应该首先看到 file-name.cpp,在下一行作为文件输出的 Fine-name每个文件。
【解决方案2】:

您可以使用“make”程序和合适的 makefile 来执行此操作。它使用规则(一些预定义的)将“.cpp”文件转换为“.o”和可执行文件。快速检查显示 GNU make 确实有 .cpp 到 .o 的默认规则(很久以前,它没有)。

【讨论】:

  • 对于给定的示例,即使没有 makefile,您也应该能够通过键入“make filename1”从 filename1.cpp 生成 filename1(可执行文件)。要制作所有内容,您将编写一个 makefile 列出可执行文件并命名结果(在这个空间中很难描述......)
  • 花几个小时阅读更多材料,尤其是 GNU make 文档(从一些教程开始......)
【解决方案3】:

GCC 编译器(在内部)一次编译一个文件(但也有 Link Time Optimization)。

您想使用像GNU make 这样的构建器;使this example(或that one)适应您的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多