什么是Eclipse CDT正在使用' make'引擎盖下

时间:2015-05-06 14:33:43

标签: c gcc windows-7 makefile eclipse-cdt

我在Windows 7上安装了MinGW / gcc。我正在使用Eclipse CDT plugin来编译和构建我的第一个简单的C程序,并且我正在尝试按照插件的内容进行操作。

我创建了一个新的" Hello World!"具有以下目录结构的C项目:

helloworld/
    src/
        helloworld.c

helloworld.c的位置:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    puts("Hello World!");
    return EXIT_SUCCESS;
}

所以我在调试模式下创建了一个运行配置(而不是&#34;发布模式&#34;, a&#34;调试配置&#34;在典型的Eclipse用语中!)并运行我的应用程序,它工作得很漂亮,打印&#34; Hello World!&#34;到Eclipse控制台。

现在我正在查看我的文件系统,文件/项目结构是这样的:

helloworld/
    src/
        helloworld.c
    Debug/
        src/
            helloworld.d
            helloworld.o
            subdir.mk
        helloworld.exe
        makefile
        objects.mk
        source.mk

假设在Eclipse中运行我的运行配置(因此在Eclipse中编译/构建/运行helloworld)在Debug下创建了所有内容。此外,我假设helloworld.dhelloworld.o是已编译的二进制文件,而helloworld.exe是打包的可执行文件,其中包含这些二进制文件以及它们与之关联的所有内容(stdio和{ {1}})。我还假设stdlib是实际的Make文件(buildscript),并且makefile文件以某种方式输入到该构建脚本。所以,首先,如果这些假设中的任何一个是错误的,请先纠正我!

当我打开*.mk时,我看到了这一点:

makefile

请注意:我正在寻找某人向我解释Make如何运作,我可以RTFM; - )

我只是想了解在Eclipse之外从命令行编译,构建和运行################################################################################ # Automatically-generated file. Do not edit! ################################################################################ -include ../makefile.init RM := rm -rf # All of the sources participating in the build are defined here -include sources.mk -include src/subdir.mk -include subdir.mk -include objects.mk ifneq ($(MAKECMDGOALS),clean) ifneq ($(strip $(C_DEPS)),) -include $(C_DEPS) endif endif -include ../makefile.defs # Add inputs and outputs from these tool invocations to the build variables # All Target all: helloworld # Tool invocations helloworld: $(OBJS) $(USER_OBJS) @echo 'Building target: $@' @echo 'Invoking: Cross GCC Linker' gcc -o "helloworld" $(OBJS) $(USER_OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' # Other Targets clean: -$(RM) $(EXECUTABLES)$(OBJS)$(C_DEPS) helloworld -@echo ' ' .PHONY: all clean dependents .SECONDARY: -include ../makefile.targets 需要什么。我需要完成哪些命令行调用这个,为什么?一旦我看到这一点,再加上仔细阅读Make docs,我应该能够填补空白并理解正在发生的一切。

1 个答案:

答案 0 :(得分:0)

* .o文件是编译创建的目标文件。这些文件通常由以下命令构建:

    Gcc -ansi -Wall -pedantic -c helloworld.c -o helloworld.o

(对于gcc的资本化道歉,我的iPad坚持要改正我的打字)

* .exe是实际的可执行文件,可能包含也可能不包含库函数。这取决于静态与动态链接。可执行文件通常由以下人员创建:

    Gcc helloworld.o -o helloworld.exe 

* .d文件是依赖文件,由gcc构建,用于确定文件之间的依赖关系,通常使用以下命令构建

    MAKEDEPEND = gcc -M $(CPPFLAGS) -o $*.d $<

(从制作在线文档中获取的规则)。

所以,为了回答你的最后一个问题,要从命令行编译一个命令,如:

    Foo gcc -ansi -WAll -pedantic helloworld.c -o helloworld.exe

应该为你做的伎俩。注意,编译器的标志是我喜欢使用的最小值,你可能会有一组不同的开关。

希望这有帮助, Ť