g ++:不使用-l标志进行编译

时间:2014-10-29 19:03:40

标签: c++ linker libraries

简单的问题 - 这些是否可以在编译期间不必调用库?我的意思是,我想简单地调用g ++ main.cpp而不调用g ++ main.cpp -lGL -lGLU -lGLEW -lSTL -lMyMother等等...我知道,makefile或简单的shell脚本,但我想制作它优雅的方式 - 在cpp代码中调用这些库 - 类似于'使用GL;'。

3 个答案:

答案 0 :(得分:2)

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

如果你不想输入标志,你真的应该使用makefile。

答案 1 :(得分:1)

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

答案 2 :(得分: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++来编译带有GCC的C ++应用程序。

还要考虑使用像this one这样的Makefile。然后输入make来构建您的软件(例如make clean来清理构建树)。

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

从技术上讲,您仍然会将-I-D标记(在编译时)和-L-l标记(在链接时)传递给gccg++pkg-config实用程序(或make ....)正在生成这些标记。

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

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