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_部件名称
s和make实用程序的一些变体(gnu make for linux和cygwin,nmake for windows的MSVC;您可以从gnu make手册开始:然后是“2.4变量使Makefiles更简单”,然后是“4.3先决条件类型”-以Makefile
命令为例,要求make在某些objdir中查找对象。还有一个命令指示make在多个目录中搜索源和对象;但项目中的所有对象都应具有不同的名称)李>addprefix
- 一些支持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