‘壹’ 如何指定Makefile编译目标文件到指定目录
可以参考Makefile视频教程:Makefile工程实践
一步一步从零开始写项目的Makefile
不仅可以编译目标文件到指定目录
源文件、中间生成的临时文件、头文件都可以放到指定目录,这是一个项目的基本需求。
‘贰’ iar使用makefile编译
要编译出在 iar开发板上运行的可执行文件,需要使用到交叉编译器 iar-linux-gnueabihf-gcc 来编译,在终端中输入如下命令:
iar-linux-gnueabihf-gcc -g -c led.s -o led.o
上述命令就是将 led.s 编译为 led.o,其中“-g”选项是产生调试信息,GDB 能够使用这些
调试信息进行代码调试。“-c”选项是编译源文件,但是不链接。“-o”选项是指定编译产生的文
件名字,这里我们指定 led.s 编译完成以后的文件名字为 led.o。执行上述命令以后就会编译生
成一个 led.o 文件
2 、arm-linux-gnueabihf-ld 链接文件
arm-linux-gnueabihf-ld 用来将众多的.o 文件链接到一个指定的链接位置。我们在学习SMT32 的时候基本就没有听过“链接”这个词,我们一般用 MDK 编写好代码,然后点击“编
译”,MDK 或者 IAR 就会自动帮我们编译好整个工程,最后再点击“下载”就可以将代码下载
到开发板中。这是因为链接这个操作 MDK 或者 IAR 已经帮你做好了,因此我们现在需要做的就是确定一下本试验最终的可执行文件其运行起始地址,也就是链接地址。这里我们要区分“存储地址”和“运行地址”这两个概念,“存储地址”就是可执行文件存储在哪里,可执行文件的存储地址可以随意选择。“运行地址”就是代码运行的时候所处的地址,这个我们在链接的时候就已经确定好了,代码要运行,那就必须处于运行地址处,否则代码肯定运行出错。比如设备支持 SD 卡、EMMC、NAND 启动,因此代码可以存储到 SD 卡、EMMC 或者 NAND 中,但是要运行的话就必须将代码从 SD 卡、EMMC 或者NAND 中拷贝到其运行地址(链接地址)处,“存储地址”和“运行地址”可以一样,比如STM32 的存储起始地址和运行起始地址都是 0X08000000,输入如下命令
arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
上述命令中-Ttext 就是指定链接地址,“-o”选项指定链接生成的 elf 文件名,这里我们命名
为 led.elf
‘叁’ 在VC里如何用Makefile文件编译
运行cmd.exe (or command.com in win9x)->进到vc/bin目录->运行vc-vars32.bat->进到makefile 所在的目录->nmake /f makefile
从sourceforge上下载下来的libjpeg源代码中有一个makefile.vc的文件,可以通过nmake /f makefile.vc [nodebug=1]来编译libjpeg,但是只能编译静态库,如果需要编译dll以便在emacs等程序中使用的话,需要修改makefile.vc和jmorecfg.h文件。在makefile.vc文件中添加编译dll规则:
以下内容为程序代码:
libjpeg.lib: $(LIBOBJECTS) $(RM) libjpeg.lib lib -out:libjpeg.lib $(LIBOBJECTS) #
添加以下这行 libjpeg.dll: $(LIBOBJECTS) $(RM) libjpeg.dll link -dll -out:libjpeg.dll $(LIBOBJECTS) 在jmorecfg.h中添加#define _WIN32_#define JPEG_DLL 然后nmake /f makefile.vc nodebug=1就可以编译了。
将makefile复制为一个.mak文件,然后用VC打开即可!
.mak 就是一个makefile
可以指定怎样编译(命令行,必须先设置VC命令行环境)
vcvars32.bat可设置环境,在vc98/bin下 nmake /f XXXX.mak
如果有一个makefile就只要nmake就可以了。
‘肆’ 有makefile文件怎么编译
makefile不是被编译的,它是用来指导编译器和链接器来编译程序源文件的,这个文件也是个文本文件,具体格式你可以在网上查一下。
‘伍’ c语言编译运行出现Makefile.win已经改变,怎么改
这个提示是说你当前项目里有多个文件里都有叫main的函数,这样会导致系统不清楚从哪个main执行,建议你可以把其它文件里的main随便改下下名字比如叫main1什么的,只把你当前要运行的文件里的主函数改为main就行了。
或者建议如果只有一般的测试代码只有一个文件的那种,新建的时候就不要建项目,直接建文件就可以了。
‘陆’ 如何指定Makefile编译目标文件到指定目录
直接指定就行,例如有如下C源程序:
$ cat tst.c
#include <stdio.h>
main()
{
printf("good morning.\n");
}
一般的资料上讲,用命令gcc -o tst tst.c生成可执行程序tst.
直接指定到你希望的目录就行,例如:
$ gcc -o /tmp/tst tst.c
可执行程序tst就生成在/tmp目录下面,而不再是生成在当前目录下面。
‘柒’ Makefile.XX文件如何用make来编译
1. 通过-f选项指定make的文件。
make -f Makefile.xx
2. (同楼上)把Makefile.xx文件修改为Makefile或makefile