存储c程序的目标文件在哪里?

时间:2016-04-27 13:25:16

标签: c

编译c源代码后,将创建一个目标文件。我只能看到.exe文件,那么我在哪里可以找到目标文件?我在windows上使用cygwin,所以我使用gcc来编译程序。

3 个答案:

答案 0 :(得分:7)

许多编译器支持-c选项仅编译并生成目标文件。

如果您使用基于make的版本,则可以将对象文件视为 intermediate 并自动删除。您可以在.PRECIOUS:目标中声明它们以避免这种情况。

如果您的程序只包含一个C源文件,则可以使用

gcc -c file.c       # Creates file.o, but no file.exe
gcc -o prog file.o  # Creates prog.exe by linking file.o with appropriate libs

答案 1 :(得分:2)

作为语言律师的回答,因为标准没有指定"目标文件"必须在编译源时创建:(Quotation from N1570, 6th footnote,强调我的)

  

6)实现应该表现得好像发生了这些单独的阶段,   尽管许多人通常在实践中折叠在一起。资源   文件,翻译单元和翻译的翻译单元不需要   必须存储为文件,也不需要任何一对一   这些实体与任何外部代表之间的对应关系   描述仅是概念性的,并未指定任何描述   具体实施。

但请注意,在大多数主流实现中,"目标文件"生成并删除。如果你想保留它们,添加-c标志(适用于GCC和clang)。

答案 2 :(得分:0)

具体实施。 C的一些(奇怪的)实现是解释器,或者(例如,tinycc)可以在存储器中编译(因此不产生任何文件)。其他人(例如我的GCC编译器,如果没有被要求......)不保留目标文件(所以当你gcc -Wall foo.c bar.c -o prog.exefoo.obj& bar.obj是暂时的不保留;但是YMMV)。