gpt4 book ai didi

c - Eclipse CDT 在底层对 'make' 做了什么

转载 作者:行者123 更新时间:2023-11-30 15:20:20 24 4
gpt4 key购买 nike

我使用的是 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;
}

因此,我在 Debug模式下创建了一个运行配置(与“ Release模式”相反,不是典型 Eclipse 术语中的“调试配置”!)并运行我的应用程序,它运行得非常好,打印“ Hello World !”到 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.d 和 helloworld.o 是已编译的二进制文件,而 helloworld.exe 是包含这些二进制文件和所有内容的打包可执行文件它们链接到(stdiostdlib)。我还假设 makefile 是实际的 Make 文件(buildscript),并且 *.mk 文件以某种方式输入到该构建脚本。因此,对于初学者来说,如果这些假设有任何错误,请先纠正我!

当我打开 makefile 时,我看到这个:

################################################################################
# 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 是如何工作的,我可以使用 RTFM ;-)

我只是想了解在 Eclipse 之外从命令行编译、构建和运行 helloworld 需要什么。我会调用什么命令行需要完成这个,为什么?一旦我看到这一点,结合仔细阅读 Make 文档,我应该能够填补空白并理解正在发生的一切。

最佳答案

这在一定程度上取决于 Eclipse 在文件 source.mkobjects.mk 中生成的路径,但很可能您需要 cd 进入 Debug 文件夹。

然后,您可以运行 make all 来编译项目。

如果 Eclipse 生成了绝对路径,您可以从任何地方使用 make -f .../path/to/helloworld/Debug/makefile all

关于c - Eclipse CDT 在底层对 'make' 做了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com