从嵌入式项目测试通用 C 库

问题描述 投票:0回答:1

我现在正在开发一个嵌入式项目。相当一部分代码是通用 C 代码(与硬件没有任何联系),可以在普通的 x86 PC 上运行。我想在我的电脑上测试这些部分,以便我可以通过 valgrind 运行它。

问题是......链接。

该项目的结构如下(我无法更改):

lib
  util.c
  ...
include
  lib
    util.h
    logging.h
    ...
  ...
...
test
  testrunner.py
  tests
    test1.c
    ...

util.c
中,我们同时包含
#include "lib/util.h"
#include "lib/logging.h"

现在我想在 testX.c 文件中使用 util(无 CMake)。

问题1:如何成功链接源文件和头文件?显然我只希望包含 util,而不是任何其他源/头文件。

问题 2: 处理 util 依赖于日志记录这一事实的最佳方法是什么(目前只是实现断言)。为我的电脑编写一个新的logging.h并链接到它是最简单的吗?

c makefile
1个回答
0
投票

使用 gcc 编译时,如果不指定任何选项,则会隐式链接源文件与标头。

这里有一个例子:

main.c:

#include "head.h"

int main(void) {
    printf("This is the main.\n");
    someFunction();
    return 0;
}

外部.c:

#include "head.h"

void someFunction() {
    printf("This is a function.\n");
}

头.h

#ifndef HEAD_H
#define HEAD_H

#include <stdio.h>

extern void someFunction();

#endif // HEAD_H

您可以使用这个简单的 Makefile 来编译和链接这些文件:

all:
    gcc -Wall main.c external.c -o program.exe

clean:
    rm program.exe

它创建了

program.exe
,可以对其执行进行测试:
./program.exe
。您将看到输出:

This is the main.
This is a function.

相反,gcc 可以编译,但如果指定

-c
选项则不会链接。然后,您可以通过链接来单独编译。你将需要一个像这样的 Makefile:

all:
    gcc -Wall -c main.c external.c 
    gcc main.o external.o -o program.exe
    rm main.o external.o

clean:
    rm program.exe

这里,首先gcc编译源文件并创建目标文件。然后,它链接创建可执行文件的目标文件。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.