发现很多人对于在Linux下编程有点蒙,就大概写一下吧。
apt-file
仅存在于debian系,但其他的包管理工具应该也提供了类似功能,可以类比使用。
IDE
Linux下的IDE大概就idea家的那几个、vscode、eclipise和qtcreator,随便挑一个顺手的就行。
常用工具
apt-file
可能当前你开发的东西是从win迁移过来的,你想找一下Linux是否有对应的头文件,头文件在哪,就会用到这个命令。
首先安装该命令并更新缓存:
sudo apt install apt-file
sudo apt-file update
然后就可以使用了,例如查找uchar.h
在哪个包里:
apt-file search uchar.h
cppreference-doc-en-html: /usr/share/cppreference/doc/html/en/cpp/header/cuchar.html
frama-c-base: /usr/share/frama-c/libc/uchar.h
gnuradio-dev: /usr/include/gnuradio/blocks/float_to_uchar.h
gnuradio-doc: /usr/share/doc/gnuradio-doc/html/classgr_1_1blocks_1_1float__to__uchar.html
libc6-dev: /usr/include/uchar.h
libc6-dev-amd64-cross: /usr/x86_64-linux-gnu/include/uchar.h
libc6-dev-arm64-cross: /usr/aarch64-linux-gnu/include/uchar.h
libc6-dev-armel-cross: /usr/arm-linux-gnueabi/include/uchar.h
libc6-dev-armhf-cross: /usr/arm-linux-gnueabihf/include/uchar.h
libc6-dev-hppa-cross: /usr/hppa-linux-gnu/include/uchar.h
libc6-dev-i386-cross: /usr/i686-linux-gnu/include/uchar.h
libc6-dev-m68k-cross: /usr/m68k-linux-gnu/include/uchar.h
libc6-dev-mips-cross: /usr/mips-linux-gnu/include/uchar.h
libc6-dev-mips64-cross: /usr/mips64-linux-gnuabi64/include/uchar.h
libc6-dev-mips64el-cross: /usr/mips64el-linux-gnuabi64/include/uchar.h
libc6-dev-mips64r6-cross: /usr/mipsisa64r6-linux-gnuabi64/include/uchar.h
libc6-dev-mips64r6el-cross: /usr/mipsisa64r6el-linux-gnuabi64/include/uchar.h
libc6-dev-mipsel-cross: /usr/mipsel-linux-gnu/include/uchar.h
libc6-dev-mipsn32-cross: /usr/mips64-linux-gnuabin32/include/uchar.h
libc6-dev-mipsn32el-cross: /usr/mips64el-linux-gnuabin32/include/uchar.h
libc6-dev-mipsn32r6-cross: /usr/mipsisa64r6-linux-gnuabin32/include/uchar.h
libc6-dev-mipsn32r6el-cross: /usr/mipsisa64r6el-linux-gnuabin32/include/uchar.h
libc6-dev-mipsr6-cross: /usr/mipsisa32r6-linux-gnu/include/uchar.h
libc6-dev-mipsr6el-cross: /usr/mipsisa32r6el-linux-gnu/include/uchar.h
libc6-dev-powerpc-cross: /usr/powerpc-linux-gnu/include/uchar.h
libc6-dev-powerpcspe-cross: /usr/powerpc-linux-gnuspe/include/uchar.h
libc6-dev-ppc64-cross: /usr/powerpc64-linux-gnu/include/uchar.h
libc6-dev-ppc64el-cross: /usr/powerpc64le-linux-gnu/include/uchar.h
libc6-dev-riscv64-cross: /usr/riscv64-linux-gnu/include/uchar.h
libc6-dev-s390x-cross: /usr/s390x-linux-gnu/include/uchar.h
libc6-dev-sh4-cross: /usr/sh4-linux-gnu/include/uchar.h
libc6-dev-sparc64-cross: /usr/sparc64-linux-gnu/include/uchar.h
libc6-dev-x32-cross: /usr/x86_64-linux-gnux32/include/uchar.h
可以看到搜索出了一堆结果,如果我想交叉编译arm64
的应用,那么我只需安装libc6-dev-arm64-cross
:
sudo apt install libc6-dev-arm64-cross
pkg-config
这是用于简化编译选项的,如果你要编译一个gtk+-3.0
的应用,那么你需要的编译选项是:
-pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/libdrm -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
这显然是反人类的,没人记得住这么多编译参数。所以就有了pkg-config
这个工具,开发库的作者会将自己的编译选项写入.pc
文件,而开发人员只需要调用pkg-config
就可以简单的使用了:
pkg-config --libs --cflags gtk+-3.0
这条命令会输出上面那段繁杂的编译参数。所以编译命令就可以简单的写为:
gcc main.c `pkg-config --libs --cflags gtk+-3.0`
另外,你可以用pkg-config --list-all
来查看当前已安装的开发库。
实际上
mac
和windows
也可以安装pkg-config
并使用,只不过使用较少
所有支持Linux的构建工具都直接或者间接支持该功能:
AutoMake的关键字是PKG_CHECK_MODULES
CMakede的关键字是pkg_check_modules
QMake的关键字是PKGCONFIG
xmake的关键字是find_package
scons的关键字是env.ParseConfig
其他
除非必要,别在开发的时候用root
权限,滥用root
是一个非常差的习惯。