Makefile-gcc编译参数(二)

2019-08-17  本文已影响0人  仙人掌__

前言

gcc是一个非常强大的编译器,它是跨平台的,早起iOS,安卓,linux,mac都支持gcc的编译(ps:现在iOS,安卓,mac都转移到功能性能更优的clang编译器了,不过clang编译器也是基于gcc编译器优化而来的,它同样也支持上述系统)

接下来就是常用的gcc编译参数

gcc常用编译参数

#ifdef CONFIG_PI
int var = 1;
#endif

如果编译时命令为:gcc -c -DCONFIG_PI test.c -o test.o 那么将会执行int var=1;语句

#if CONFIG_PI
int var = 1;
#endif

如果编译时命令为:gcc -c -DCONFIG_PI=1 test.c -o test.o 那么将会执行int var=1;语句

对于#include<file>;编译器默认只在系统目录查找。如果指定了-Idir,那么将先到dir所在目录去搜索要包含的文件未找到按默认规则查找

系统目录一般是操作系统的标准头文件搜索目录,编译器自带的搜索路目录等等(gcc和clang不太一样,不过含义是一样的)如下为clang编译器的系统目录

gcc -c main.c -o main.o -v
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.3/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
gcc -E main.c -o main.i
gcc -E -C main.c -o main.i

可以看到没有-C时 main.i文件将没有注释信息

备注:如果最终可执行程序是动态链接生成的,那么程序加载时默认到系统目录(一般是/usr/local/lib下)下搜索所引用的动态库(并非会到上面的dir中搜索),如果设置了LD_LIBRAY_PATH环境变量的值,那么程序加载时动态库将优先去该路径搜索,然后按默认规则搜索

gcc -std=c++11 hello-world.cpp

可指定的值有c++11, c++14, c90, c89等等

参考官网

gcc编译参数(官网)

上一篇 下一篇

猜你喜欢

热点阅读