我的问题
我在某个地方读到,为了向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
(现在我不得不这样做)
请帮忙,谢谢!
#include "classes/a.h"
,那么你需要将包含classes
目录的目录添加到-I
中,而不是classes
本身。此外,如果你只想编译而不链接,你需要添加-c
标志或者添加已经编译好的*.o
文件。更好的方法是使用构建系统或者 makefile。 - PeterTld
无法找到那些类文件中所包含的类的引用。 - Mechag++ -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