2014-10-29 64 views
0

简单的问题是这些在编译期间不必调用库的方法吗?我的意思是,我想简单地调用g ++ main.cpp而不调用g ++ main.cpp -lGL -lGLU -lGLEW -lSTL -lMyMother等等......我知道,makefile或简单的shell脚本,但是我想使它优雅的方式 - 在cpp代码中调用这些库 - 就像'使用GL'一样。g ++:编译时没有-l标志

+1

不,与VC++不同,没有办法通过在源代码中指定它来告诉GCC哪些库链接到哪个库。使用makefile。 – 2014-10-29 19:45:47

回答

2

由于您使用的是GCC,因此您可以创建/修改specs file以添加所需的标志。

如果你不喜欢键入标志,你确实应该使用makefile。

+0

嗯,我想你是对的 - 每个人都在使用Makefiles是有原因的。 ;) – 2014-10-29 19:24:01

+1

不要修改规格文件以在其中添加库。 – 2014-10-29 19:40:49

1

从技术上讲,你可以通过dlopen()动态加载库并调用它的函数(我假设你在* nix上)。虽然这不是一回事,我怀疑会让你的生活更轻松。除此之外,没有指定在源文件中使用哪个库的便携方式。

+0

谢谢,得试试这个方法。我只应该记住,如果某件事不起作用,那是因为我的懒惰。 – 2014-10-29 19:24:38

1

在Linux上,您可以使用pkg-config和shell扩展。使用pkg-config --list-all来发现它已知的软件包(您可以添加.pc文件来添加新软件包)。例如,GTK应用mygtkapp.c可以用

gcc -Wall -g $(pkg-config --cflags gtk+-x11-3.0) -c mygtkapp.c 

后来与

gcc -g mygtkapp.o $(pkg-config --libs gtk+-x11-3.0) -o mygtkapp 

注意的参数gcc顺序总是问题链接进行编译。当然,使用g++来编译C++应用程序GCC

也考虑使用Makefile,如this one。然后,只需键入make即可构建您的软件(例如make clean来清理构建树)。

您可能会在您的Makefile中使用奇怪的技巧,例如用awk解析你的C++代码中的一些注释来提供make,但我认为这是一个坏主意。

从技术上讲,你仍然可以通过-I-D标志(在编译时)和-L-l标志(在连接时),以gccg++pkg-config实用程序(或make ....)正在产生这些标志。

如果您使用emacs编辑源代码,则可以在C文件末尾添加注释以设置emacs的一些编译命令,请参阅this

PS。我不建议为此目的配置您的GCC规格文件。