C++ g+中的对象文件是否有-I(大写字母I)的等价物+;?

C++ g+中的对象文件是否有-I(大写字母I)的等价物+;?,c++,linker,g++,C++,Linker,G++,我有几个来自不同目录的对象文件(它们存储在生成它们的相应源附近)。有没有一种方法可以给出这个目录结构 根 根/一些长路径 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安装) 这样我就不必把完整路径放在每个对象文件前面。用什么代替-I命

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

根/一些长路径

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安装)

这样我就不必把完整路径放在每个对象文件前面。用什么代替
-I
命令

没有像
-I
这样的gcc选项来向对象“搜索路径”添加一些目录,也没有对象的搜索路径。但是有库的搜索路径(对于静态库通常命名为
lib*.a
,对于Unix世界中的共享库通常命名为
lib*.so

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

gcc的链接选项手册仅提及
-L
选项(靠近
-L
说明):

您可以使用什么:

  • shell变量或环境变量(在bash中:
    OBJ_DIR=./path/to/DIR
    然后
    g++…$OBJ_DIR/obj1.o$OBJ_DIR/obj2.o
  • 将多个对象从单个目录打包到单个
    libSome\u Long\u Component\u Name.a
    (这种类型的库就像几个
    *.o
    对象文件和一些使用
    ar rcs
    生成的额外信息的存档);然后您可以使用
    g++-Ldir/-lSome_Long_部件名称
  • Makefile
    s和make实用程序的一些变体(gnu make for linux和cygwin,nmake for windows的MSVC;您可以从gnu make手册开始:然后是“2.4变量使Makefiles更简单”,然后是“4.3先决条件类型”-以
    addprefix
    命令为例,要求make在某些objdir中查找对象。还有一个命令指示make在多个目录中搜索源和对象;但项目中的所有对象都应具有不同的名称)
  • 一些支持Unix项目的IDE(;它们通常管理项目的所有源,并且能够为项目生成makefile
  • 一些更现代的构建系统,而不是make:like(或者qmake,如果您使用Qt)

有用于搜索库的
-L
选项(
lib*.so
lib*.a
,在unix术语中),并且似乎没有用于对象文件(和)的gcc选项。您可以使用make+makefiles自动设置正确的路径。您不需要设置完整路径,而是使用相对路径。@osgx谢谢,我今天要花一些时间学习如何编写/使用makefiles。我的一些代码用于多个应用程序,例如输入验证模块,我觉得应该将其视为一个库-如何创建库文件?@Barmar我的意思是,有没有办法避免每次都写出完整的相对路径。所有路径都是相对的(Root是我的应用程序的基本文件夹,而不是我的系统),您可以将长路径前缀放在一个变量中,并使用
$dir/object\u 1.o
。非常感谢-非常详细的答案!我现在有了一个makefile,今天晚些时候我将查看
addprefix
命令,并将项目的各个部分合并到库中:)
g++ -Wall main.o -ISome_long_path object_1.o object_2.o -o app