入口 gcc-4.6.0/gcc/gcc.c

该博客主要介绍如何在GCC中处理命令行参数,通过decode_cmdline_options_to_array函数将argc和argv中的信息存储到数组中,以便进行进一步的编译处理。
gcc程序入口。分析gcc工作流程的起点。
 
示例:
执行命令:
         /usr/bin/gcc -o /home/malele/hello.o /home/malele/hello.c
----------------------------
输入: int argc,参数个数;
       char **argv,参数,字符串数组。
输出:
----------------------------
执行过程:
1, 处理第一个参数:arg[0]:"/usr/bin/gcc". 提取程序名称"gcc", 从后往前扫描arg[0],用方法xmalloc_set_program_name()[./libiberty/xmalloc.c Line106]记录之. 方法IS_DIR_SEPARATOR(ch) [./libiberty/basename.c Line36/38]用于判断是否为目录分隔符(linux下"/",windows下"\\").
2, 展开@参数:
         expandargv(&argc, &argv) [./libiberty/argv.c Line 383]. 该函数处理文件名列表中以@开头的参数,并将其展开为实际的文件名。

3, 将参数全部存储到数组中:
     

  1. /*将main函数中的argc,argv存储的命令行选项信息存储到数组中, 指针*DECODED_OPTIONS指向这个数组, *decoded_options_count指向用于表示数组大小的数值. 数组的第一项是命令行命令中的程序名称(OPT_SPECIAL_program_name,如gcc)*/
  2. //main调用
  3. decode_cmdline_options_to_array (argc, CONST_CAST2 (const char **, char**,argv),CL_DRIVER,&decoded_options, &decoded_options_count);
  4. //定义 
  5. void
  6. decode_cmdline_options_to_array (unsigned int argc, const char **argv, 
  7.  unsigned int lang_mask,
  8.  struct cl_decoded_option **decoded_options,
  9.  unsigned int *decoded_options_count)



----------------------------

----------------------------
备注:

1,ftell函数,标准库函数,获取当前输入流指针位置

2,gcc [@files] , 参数files中存储了gcc的命令行参数;编译器会将文件中的内容读出并作为gcc参数来代替@files参数。files中可能还会有@声明,编译器递归处理。gcc最多能处理2000个@命令,详见[./libiberty/argv.c Line391].。
 
 
 
使用这种方式,编译命令显示是这样: (cd /home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/build_dir/target-aarch64_cortex-a53_musl/syslog-ng-4.6.0/./; if [ -x ./configure ]; then find /home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/build_dir/target-aarch64_cortex-a53_musl/syslog-ng-4.6.0/ -name config.guess | xargs -r chmod u+w; find /home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/build_dir/target-aarch64_cortex-a53_musl/syslog-ng-4.6.0/ -name config.guess | xargs -r -n1 cp --remove-destination /home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/scripts/config.guess; find /home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/build_dir/target-aarch64_cortex-a53_musl/syslog-ng-4.6.0/ -name config.sub | xargs -r chmod u+w; find /home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/build_dir/target-aarch64_cortex-a53_musl/syslog-ng-4.6.0/ -name config.sub | xargs -r -n1 cp --remove-destination /home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/scripts/config.sub; AR=“aarch64-openwrt-linux-musl-gcc-ar” AS=“aarch64-openwrt-linux-musl-gcc -c -Os -pipe -mcpu=cortex-a53 -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/build_dir/target-aarch64_cortex-a53_musl/syslog-ng-4.6.0=syslog-ng-4.6.0 -Wformat -Werror=format-security -DPIC -fPIC -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,now -Wl,-z,relro -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libiconv-stub/include -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libintl-stub/include” LD=aarch64-openwrt-linux-musl-ld NM=“aarch64-openwrt-linux-musl-gcc-nm” CC=“aarch64-openwrt-linux-musl-gccGCC=“aarch64-openwrt-linux-musl-gcc” CXX=“aarch64-openwrt-linux-musl-g++” RANLIB=“aarch64-openwrt-linux-musl-gcc-ranlib” STRIP=aarch64-openwrt-linux-musl-strip OBJCOPY=aarch64-openwrt-linux-musl-objcopy OBJDUMP=aarch64-openwrt-linux-musl-objdump SIZE=aarch64-openwrt-linux-musl-size CFLAGS=“-Os -pipe -mcpu=cortex-a53 -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/build_dir/target-aarch64_cortex-a53_musl/syslog-ng-4.6.0=syslog-ng-4.6.0 -Wformat -Werror=format-security -DPIC -fPIC -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,now -Wl,-z,relro -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libiconv-stub/include -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libintl-stub/include " CXXFLAGS=”-Os -pipe -mcpu=cortex-a53 -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/build_dir/target-aarch64_cortex-a53_musl/syslog-ng-4.6.0=syslog-ng-4.6.0 -Wformat -Werror=format-security -DPIC -fPIC -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,now -Wl,-z,relro -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libiconv-stub/include -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libintl-stub/include " CPPFLAGS=“-I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/usr/include -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/include/fortify -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/include -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libiconv-stub/include -I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libintl-stub/include " LDFLAGS=”-L/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/usr/lib -L/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/toolchain-aarch64_cortex-a53_gcc-11.2.0_musl/lib -DPIC -fPIC -specs=/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/include/hardened-ld-pie.specs -znow -zrelro -L/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libiconv-stub/lib -Wl,-rpath-link=/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libiconv-stub/lib -L/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libintl-stub/lib -Wl,-rpath-link=/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/lib/libintl-stub/lib " CXXFLAGS = " -fno-exceptions -fno-exceptions -fno-unwind-tables" CFLAGS = " -fno-exceptions -fno-exceptions -fno-unwind-tables" LIBDBI_CFLAGS=“-I/home/compile/prpLink/prplos/board/airoha_an75xx/sdk/er_phase2/prplos/prplos-v3.0.1/staging_dir/target-aarch64_cortex-a53_musl/usr/include” ./configure --target=aarch64-openwrt-linux --host=aarch64-openwrt-linux --build=x86_64-pc-linux-gnu --program-prefix=“” --program-suffix=“” --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --sysconfdir=/etc --datadir=/usr/share --localstatedir=/var --mandir=/usr/man --infodir=/usr/info --disable-nls --disable-afsnmp --enable-ipv6 --disable-tcp-wrapper --disable-spoof-source --disable-sql --disable-linux-caps --with-jsonc=system --enable-cpp=no --enable-json=yes --enable-http=yes --disable-smtp --disable-mqtt --disable-redis --disable-dependency-tracking --disable-python --disable-geoip2 --disable-java --disable-java-modules --with-librabbitmq-client=no --with-mongoc=no syslog-ng; fi; ) bash: CXXFLAGS: command not found 里面有两个CXXFLAGS,该如何设置呢
最新发布
12-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值