C++ 为g++;永久地

C++ 为g++;永久地,c++,include,g++,shared-libraries,C++,Include,G++,Shared Libraries,我尝试在终端中使用g++编译.cpp文件: g++ -o main main.cpp \ -I/usr/include/glib-2.0 \ -I/usr/include/json-glib-1.0 \ -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ \ -L/usr/lib/x86_64-linux-gnu -ljson-glib-1.0 -lglib-2.0 它是有效的 但是我想添加这些。所以库和永久包含g++的文件,这样我就不需

我尝试在终端中使用g++编译.cpp文件:

g++ -o main main.cpp \
  -I/usr/include/glib-2.0 \
  -I/usr/include/json-glib-1.0 \
  -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/ \
  -L/usr/lib/x86_64-linux-gnu -ljson-glib-1.0 -lglib-2.0
它是有效的

但是我想添加这些。所以库和永久包含g++的文件,这样我就不需要每次都键入这些。我还想让它适用于其他应用

我正在使用ubuntu


有人能帮我吗?提前非常感谢。

最好、最灵活的方法是通过构建系统,使用Make、CMake或类似工具。但有一个严重的学习曲线。现在只创建一个脚本文件来运行您从命令行成功使用的相同命令可能更简单

我假设您使用的是bashshell。您只需编辑一个文件——称之为“compile.bash”。在文件的第一行,键入“#!/bin/bash”。它告诉系统将该文件解释为bash脚本文件。然后在随后的一行或多行中,键入您刚才在问题中提供的命令,与您以前使用的命令完全相同。保存文件。然后从命令行“chmod+xcompile.bash”(不带引号)运行此命令。确保新文件位于编译的目录中,并且您可以键入: “compile.bash”而不是以前使用的长命令行

示例文件“compile.bash”


您需要进一步调查三件不同的事情:

  • 影响编译器的环境变量。因为您使用的是GCC,所以我可以指出。特别是,您应该阅读以下内容:
LIBRARY\u路径

LIBRARY\u PATH
的值是以冒号分隔的 目录,很像
PATH
。当配置为本机编译器时,GCC 在搜索特殊链接器时尝试这样指定的目录 文件,如果使用
GCC\u EXEC\u前缀
无法找到它们。使用GCC链接 在搜索的普通库时也使用这些目录 -l选项(但以-l指定的目录优先)

  • 操作系统搜索共享动态库的方式。由于您使用的是Linux,我建议您(讨论
    ldconfig
最重要的是:

  • 什么是软件构造工具或Makefile。为此,您可以参考页面、页面或页面。简而言之,每个选项都为您提供了描述如何构建软件的方法,然后使用简单的命令实际构建软件(
    scons
    cmake
    、或
    make
    ,具体取决于您选择的系统)

总之,我对你的问题没有答案。我只能建议您研究一下这些问题。

下面是一个使用pkg config的Makefile的非常基本的示例,无论如何,您都应该在glib中使用它,它可以消除很多痛苦:

CXXFLAGS += $(shell pkg-config --cflags glib-2.0) $(shell pkg-config --cflags json-glib-1.0)
LIBS     += $(shell pkg-config --libs glib-2.0) $(shell pkg-config --libs json-glib-1.0)

all: main

main: main.o
    $(CXX) $(CXXFLAGS) main.o -o main $(LIBS)

clean:
    rm -f main main.o
为自己找到gnu make教程可能是明智的,这样您就可以更好地理解这个示例


现在,您不必运行手动键入的shell命令,只需执行“make”即可。

也许是学习如何创建简单的makefile的时候了。是的,makefile正是您在这里想要的。
CXXFLAGS += $(shell pkg-config --cflags glib-2.0) $(shell pkg-config --cflags json-glib-1.0)
LIBS     += $(shell pkg-config --libs glib-2.0) $(shell pkg-config --libs json-glib-1.0)

all: main

main: main.o
    $(CXX) $(CXXFLAGS) main.o -o main $(LIBS)

clean:
    rm -f main main.o