第一篇帖子在这里,不是以英语为母语的人,乐于发帖和帮助他人!
我有一个问题,使用make来为我编写一个avr-gcc项目.更具体地说,在将不同目录的*.c源文件列表(在我的例子中为子目录)分配给make中的变量时,它将用于生成依赖项。
使用我发现的这方法,Renaud Pacalet使用以下语法:
SRC = $(shell find src/ -name "*.cpp")在本例中使用find命令如下所示:
SOURCE_FILES = $(shell find -name '*.c')结果是(在cmd上):
C:\AVR_projetos\Balizar_reserva>find -name '*.c'
./main.c
./modules/i2c/i2c.c
./modules/rom/rom.c但是,当make调用shell来执行脚本时,变量只保存序列中的第一个文件名。
到目前为止我试过:
另外,我还提到了这两页手册:
他们都用一种简单的方式解释说,这是可能的,我做同样的事情,却一无所获。
说句公道话,我在遇到这个问题之前遇到了一个问题:
avr-gcc -MM main.c > depend.d
0 [main] sh 14484 sync_with_child: child 15780(0x1DC) died before initialization with status code 0xC0000142
158 [main] sh 14484 sync_with_child: *** child state waiting for longjmp
/usr/bin/sh: fork: Resource temporarily unavailable make: *** [depend] Error 128为此,我找到了这个修复,它很适合工作。
发布于 2020-01-25 01:10:52
谢谢大家的建议,我真的很感激。通过使用以下命令,可以让这个该死的东西正常工作:
$(shell find -name "*.c")这样我们就可以将它赋值给一个变量并使用它。这样,我们就可以将下面的makefile用于相应的拟议项目结构。
这个项目是为avr-gcc程序设置的,但是这个概念适用于正常的c和cpp编程.文件结构(例如,在编译avr相关项目时,i2c可以是一个通用模块,而avr_config.h可以是一个特殊的头):
.
├── modules
│ └── i2c
│ ├── i2c.c
│ └── i2c.h
├── main.c
├── Makefile
└── avr_config.h从变量开始,可以有任意多个模块。
SOURCE_FILES = $(shell find -name "*.c")把他们全部抓起来。我以最简单的方式设置了它,因此,目标文件将与源文件和头文件一起编译,然后在主目录中链接在一起。也是一个名为
depend.d将被创建,以便进行编译。
makefile还包含一些有用的命令,这些命令在文件的编写过程中进行了描述。
希望这能帮到别人!一个专门的帖子将被做,解释所有的背景和如何建立一个通用的avr-gcc项目的微控制器编程在视觉工作室的代码。
发布于 2020-01-24 06:28:29
欢迎来到SO,正如您提到的那样,您引用了通配符函数,但是描述说:
通配符函数的一种用法是获取目录中所有C源文件的列表,如:
$(wildcard *.c)。
那么我认为当您执行Make时,main.c编译了吗?
您需要改进通配符以搜索子目录或手动添加它们。看看这个回答和问题。
https://stackoverflow.com/questions/59890983
复制相似问题