Tag: 构建

类似Arduino的Makefile与依赖…?

我目前正在尝试使用SDCC OS编译器为STM8微控制器开发C库和项目模板。 我的目标是一个(几乎)与NOdu兼容的设置,类似于Arduino – 但是使用make + shellscripts而不是IDE(我的野心有限……) 目前我正在努力使用make来自动检测依赖项。 在Arduino中,用户只包含相关的头文件,例如“#include LCD-lib”,构建机制自动检测依赖关系并链接各自的库。 无需手动将其添加到IDE或Makefile。 我喜欢它的简单性,但到目前为止,我在创建相应的Makefile时失败了。 基本上这是Makefile应该实现的: 扫描项目根目录中的* .c文件以获取包含的标头。 请注意,这些文件位于不同的lib文件夹中 将所有包含的标头和(如果存在)相应的C文件添加到构建过程 为了最小化编译时间和大小,必须在构建期间跳过lib文件夹中未使用的C文件 我相信make可以做到以上所有 – 但不是我的制作经验…… 🙁 这是我想到的文件夹结构: ├── Library │ ├── Base │ │ ├── general STM8 sources and headers │ ├── STM8S_Discovery │ │ └── board specific sources and headers │ └── User │ └── optional user library […]

如何在Go中构建发布版本的二进制文件?

在C中,我们可以构建二进制文件的调试版本或发行版本(目标文件和可执行文件)。 我们怎么能在Go中做到这一点?

使用C在eclipse中多次定义主要错误

我正在尝试使用eclipse中的C Project生成两个exes,客户端和服务器。 两者都有主要function,因为它们是不同的前提。 两者都使用常见的confutils.c文件。 如何解决主要问题的多重定义。 我知道我们在一个项目中不能有两个主电源。 我的makefile如下所示。 .co: gcc -g -c $? # compile client and server all: confclient confserver # compile client only confclient: confclient.o confutils.o gcc -g -o confclient confclient.o confutils.o # compile server program confserver: confserver.o confutils.o gcc -g -o confserver confserver.o confutils.o 我用这个替换了eclipse文件。 我不知道eclipse是否正确阅读它。 我不喜欢将这个项目分成两个,因为它是一个如此简单的程序。 我能够在unix中运行这些文件,没有任何问题。 我试图找到eclipse中是否有一个选项,我们可以使用它来设置构建配置。

制定配方以防止重建非依赖目标

我有以下项目目录结构: Prog /include /include/dir1 /include/dir2 /src /src/dir1 /src/dir2 App1依赖于mod1和mod2,其中App2仅依赖于mod1。 使用下面表示的makefile,模块和应用程序都可以正确构建 – 但是如果我对mod2进行了更改然后执行’make all’,即使App2没有依赖项,它也会被重建。 这是因为OBJ被传递到目标构建配方中的是所有OBJ,而不仅仅是当前目标所需的特定OBJ。 我想知道makefile的哪些更改只能将依赖对象传递给正在构建的当前目标。 makefile: CC := g++ LD := g++ TARGETS := app1 app2 MODULES := mod1 mod2 INC_DIR := $(addprefix include/,$(MODULES)) SRC_DIR := $(addprefix src/,$(MODULES)) BUILD_DIR := $(addprefix build/,$(MODULES)) SRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.cpp)) OBJ := $(patsubst src/%.cpp,build/%.o,$(SRC)) INCLUDES := -Iinclude $(addprefix […]

如何链接到C中的静态库?

我使用code :: blocks来编译我的静态库。 输出结果是libstatic.a文件。 现在,如何链接到我的库以使用已编译的函数? (我尝试使用#include“libstatic.a”,但我的项目没有编译)