使用 MinGW32 GCC 编译。只告诉链接库一次?

Posted

技术标签:

【中文标题】使用 MinGW32 GCC 编译。只告诉链接库一次?【英文标题】:Compiling with MinGW32 GCC. Only tell link libraries once? 【发布时间】:2012-07-25 09:00:48 【问题描述】:

我正在使用 mingw32 gcc 通过命令行编译程序。随着源文件的增加,我遇到了一些问题。首先,考虑以下脚本:

gcc -Wall -I"MyDir" -I"MyDir2" -L"MyLibDir" -L"MyLibDir2" -l lib1 -l lib2 -l lib3 -c file.c
gcc -Wall -I"MyDir" -I"MyDir2" -L"MyLibDir" -L"MyLibDir2" -l lib1 -l lib2 -l lib3 -c file2.c
gcc -Wall -I"MyDir" -I"MyDir2" -L"MyLibDir" -L"MyLibDir2" -l lib1 -l lib2 -l lib3 -c file3.c
gcc -o myprog.exe file1.o file2.o file3.o

现在,我不能只告诉gcc 编译器目录-I、链接器目录-L 和链接库-l 一次,然后用相同的选项编译第二个和第三个源文件,而不必重新输入?类似的东西

gcc -define-options -Wall -I"MyDir" -I"MyDir2" -L"MyLibDir" -L"MyLibDir2" -l lib1 -l lib2 -l lib3 
gcc -Wall -c file1.c
gcc -Wall -c file2.c
gcc -Wall -c file3.c
gcc -o myprog.exe file1.o file2.o file3.o

【问题讨论】:

【参考方案1】:

据我所知,不,你不能。但这就是发明 make 和 Makefile 的原因 :) 我认为 this tutorial 足以让您开始为您的小型项目编写一个体面的 Makefile。

PS:快速而肮脏的方法是编写一个简单的 bash 脚本,将包含目录保存在一个变量中,但在我看来 Makefile 是一个更好的选择,因为您不想重新发明***。

PS2:出于好奇,我发现确实有办法做到这一点。您只需要定义一些环境变量。详情见这里:How to add a default include path for gcc in linux?

【讨论】:

链接教程的要点:调用目标all 没有什么特别的。 make 认为在 .DEFAULT_GOAL 为空时读取的第一个目标是默认值,除非对特殊变量 .DEFAULT_GOAL 的赋值改变了这一点。见gnu.org/software/make/manual/html_node/Special-Variables.html。

以上是关于使用 MinGW32 GCC 编译。只告诉链接库一次?的主要内容,如果未能解决你的问题,请参考以下文章

minGW package备注介绍

能不能只使用G++这一个程序来编译源文件?

用mingw32 gcc 一编译就出一大堆错误,应该怎么解决

[编译] 2minGW gcc在windows搭建编译win32程序环境

VS与MinGW编译器有啥不同

mingw64 的 gcc 不使用 mingw 套件的汇编程序