【问题标题】:Compiling Multiple source file into the one .o with g++ [duplicate]使用g ++将多个源文件编译成一个.o [重复]
【发布时间】:2013-03-13 13:24:47
【问题描述】:

我希望将多个 .cc 文件编译成一个 .o 文件。

我正在使用我需要做的 bash 脚本将我的单元测试源文件构建到 unit_test.o 文件中,但它说“g++:不能指定 -o 和 -c 或 -S 和多个文件" 我在脚本的下一阶段链接这些源文件。

到目前为止我有;

g++ -Wno-deprecated -std=c++0x \
    -o $Unit_Test_Output_Directory/unit_test.o \
    -c $Unit_Test_Source_Directory/test1.cc $Unit_Test_Source_Directory/test2.cc

然后我有了我的 -I's 和 -L's,bash 中的“\”用于将命令拆分为多行。

然后在链接阶段,我将我的 unit_test.o 和源文件的 .o 链接到一个 unit_test_executable。

有人可以帮我吗?我是否需要继续为-o unit_test1.o -c test1.cc 调用构建函数,然后为测试2...并在链接阶段链接unit_test1.o 和unit_test2.o?

我也试过了,也没成功:

g++ -Wno-deprecated -std=c++0x \
    -o $Unit_Test_Output_Directory/unit_test1.o  \
    $Unit_Test_Output_Directory/unit_test2.o \
    -c $Unit_Test_Source_Directory/test1.cc \
    $Unit_Test_Source_Directory/test2.cc

【问题讨论】:

  • 你基本上不能这样做:.o 文件是源文件的 1-1 个目标文件。
  • @Joe 当然,但我怀疑 lukegjpotter 提出了错误的问题。
  • 您可以随时将源文件合并为一个临时文件并进行编译。但是,它会产生太多副作用,请不要这样做。为什么你甚至想要它?如果您想要一个文件,请改用 ar 存档。您也可以使用 --combine,但这仅适用于 C 编译器。

标签: c++ g++


【解决方案1】:

您不能将多个源文件编译为单个目标文件。每个源文件都必须编译成自己的目标文件。

你必须为每个源文件单独做:

g++ -Wno-deprecated -std=c++0x \ -o $Unit_Test_Output_Directory/unit_test1.o \ -c $Unit_Test_Source_Directory/test1.cc g++ -Wno-deprecated -std=c++0x \ -o $Unit_Test_Output_Directory/unit_test2.o \ -c $Unit_Test_Source_Directory/test2.cc

【讨论】:

  • 这是一个可怕的解决方案,但必须这样做。我有一个完整但冗长的过程来创建一个新的单元测试文件并将其放入 bash 脚本中。
  • @lukegjpotter 这就是make 的真正用途。
  • 这是一个让 CUTE 单元测试与 Maven 和 Jenkins 一起工作的 Frankenstien 的怪物过程。现在完成了,希望。
猜你喜欢
  • 2022-01-13
  • 2012-04-08
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2013-08-13
相关资源
最近更新 更多