g ++中的目标文件是否等效-I(大写字母I)?

时间:2015-03-12 02:35:49

标签: c++ linker g++

我有几个来自不同目录的目标文件(它们存储在生成它们的相应源附近)。有没有给出这个目录结构的方法

main.o

根/ Some_long_path

object_1.o
object_2.o

我可以运行这样的命令

g++ -Wall main.o -ISome_long_path object_1.o object_2.o -o app

因此,我不必将完整路径放在每个目标文件的前面。什么会取代-I命令?

我正在使用gcc版本4.8.3(来自Cygwin安装)。

1 个答案:

答案 0 :(得分:2)

  

因此,我不必将完整路径放在每个目标文件的前面。什么会取而代之的是-I命令?

没有像-I这样的gcc选项将一些目录添加到对象"搜索路径",并且没有对象的搜索路径。但是存在库的搜索路径(通常在静态库中为lib*.a,在Unix世界中为共享库命名为lib*.so

gcc的目录选项手册仅列出包含路径的-I选项和库路径的-L选项。没有对象路径:

https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options

gcc的链接选项手册仅提及-L选项(-l描述附近):

https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html#Link-Options

你能用什么:

  • shell变量或环境变量(在bash:OBJ_DIR=./path/to/dir然后g++ ... $OBJ_DIR/obj1.o $OBJ_DIR/obj2.o
  • 将单个目录中的多个对象打包到单个static library libSome_Long_Component_Name.a(这种类型的库就像几个*.o目标文件的存档和{{1}的一些额外信息});然后你可以使用ar rcs
  • g++ ... -Ldir/ -lSome_Long_Component_Name和make实用程序的一些变体(gnu make for linux和cygwin,nmake for windows&#MS; MSVC;你可以从gnu make manual:http://www.gnu.org/software/make/manual/make.html#Simple-Makefile然后" 2.4变量使Makefile变得更简单"然后" 4.3先决条件的类型" - 用Makefile命令的例子来查询某些objdir中的查找对象。还有VPATH special variable指示make搜索多个目录中的源和对象;但项目中的所有对象应具有不同的名称)。
  • 某些IDE支持Unix项目(Code::Blockslist1list2wikilist of C/C++ IDE?);他们通常管理您项目的所有来源,并能够为项目生成Makefile。
  • 一些更现代的构建系统,而不是make:如CMakeSCons(如果使用Qt,则为qmake)。