使用g ++将多个源文件编译为一个.o

时间:2013-03-13 13:24:48

标签: c++ g++

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

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

到目前为止,我有;

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和-L,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

1 个答案:

答案 0 :(得分: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