G++ 添加包含和链接路径

4

我的问题

我在某个地方读到,为了向g++添加包含路径,需要使用 -I 选项:

g++ -I /some/directory and_then_my_files.cpp

但是,我不确定这是否是我真正需要的。它目前对我不起作用,而且我找不到任何其他接近我拥有的东西。

我的设置

我有一个目录,其中包含所有当前项目代码,并且其中包含一个子目录 classes,其中包含各种包含类的.h.cpp文件,在编译主文件时可能会使用或不使用。

由于 g++ ./classes/*.cpp main.cpp 需要很长时间(classes 目录中的文件数量很大),因此我正在寻找一种替代方法,只编译和链接包含在主文件中的文件。

主文件:

#include "classes/a.h"
#include "classes/b.h"
// ... my code

我需要做的是让类A和B仅被构建/链接,而不必将整个 classes 目录添加到构建命令中。否则,g ++会出现对类A和B未定义引用的错误。尝试使用-I-L没有奏效,并且将整个目录添加到构建命令中会导致构建时间过长。有没有办法只编译/链接来自classes目录的已包含类,例如我上面提供的例子中的类A和B?
我已经尝试了以下方法: g++ -I./classes main.cpp -o main g++ -L./classes main.cpp -o main(也许很愚蠢,但我还是试了) g++ ./classes/*.cpp main.cpp -o main(现在我不得不这样做)
请帮忙,谢谢!

1
如果你使用 #include "classes/a.h",那么你需要将包含 classes 目录的目录添加到 -I 中,而不是 classes 本身。此外,如果你只想编译而不链接,你需要添加 -c 标志或者添加已经编译好的 *.o 文件。更好的方法是使用构建系统或者 makefile。 - PeterT
如果您使用Makefile,当您更改某些内容时,它只会重新编译已更改的内容。一些旧的编译器曾经像您想要的那样工作(Oracle Solaris Studio仍然有一个选项可以这样做),但是对于大多数编译器,您需要明确需要编译什么。 - Marc Glisse
我建议使用CMake。它会让你的生活更轻松。 - John Zwinck
我觉得我可能错误地解释了问题。这不是包含文件的问题,那部分工作正常。更多的是关于链接的问题。文件被成功包含了,但链接器ld无法找到那些类文件中所包含的类的引用。 - Mecha
@Mekku 嗯,就像我试图告诉你的那样,你需要在所有类上运行 g++ -c classes/someclass.cpp -o classes/someclass.o,然后运行 g++ -c main.cpp -o main.o,最后运行 g++ main.o classes/someclass.o classes/moreclasses.o -o main 进行链接和编译。正如你所看到的,手动执行这些步骤是很繁琐的,因此你应该使用一个构建系统。使用构建系统还可以防止你手动确保没有忘记编译修改源代码的文件,或者编译已经编译了最新版本的文件。 - PeterT
显示剩余2条评论
1个回答

0

一个临时解决方案

export CPLUS_INCLUDE_PATH=/usr/local/include

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接