代码阅读软件sourceinsight

介绍

make clean
make -j8 > build_log
./si_tool.sh build_log file_list_kernel5.15
make distclean
make V=1 > log.log

应该可以再一步优化:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=OUTPUT -j8  > log.txt

通过上述的O=OUTPUT指定输出文件结果目录。方便查找o文件

新建工程

浏览模式(只读)

Edit ->Browser Mode

创建一个名为"si.sh"的文件,内容如下:

#!/bin/bash

rm -f *.si 

part1_all_file=part1_all.si
part1_out_file=part1_out_file.si


#rm -f $part1_all_file
#rm -f $part1_out_file

object_files=$(find ./ -type f -name "*.o")
for object_file in $object_files; do  
tmp_file="${object_file%o*}*"
echo $tmp_file >> $part1_all_file
done
sed -i 's/ /\n/g' $part1_all_file
grep -E '\.(c|h|S|s)$' $part1_all_file > $part1_out_file

#ls -l $part1_out_file


#--------------------------------------------------------------------

logfile="log.log"

part2_all_path="all.si"
no_pwd_path="no_pwd.si"
char_path="char.si"
repeat_path="repeat.si"


part2_out_file="part2_out_file.si"

#rm -f $part2_all_path
#rm -f $no_pwd_path
#rm -f $char_path
#rm -f $part2_out_file

grep -oE '\b\S+\.S\b' $logfile | grep -v '/\.' | grep -v '=' >> $part2_all_path

grep -oE '\b\S+\.s\b' $logfile | grep -v '/\.' | grep -v '=' >> $part2_all_path

grep -oE '\b\S+\.c\b' $logfile | grep -v '/\.' | grep -v '=' >> $part2_all_path

grep -oE '\b\S+\.h\b' $logfile | grep -v '/\.' | grep -v '=' >> $part2_all_path


current_path=$(pwd)
#echo $current_path

tmp_path="${current_path:1}"
#echo $tmp_path


# delet current_path
while IFS= read -r line; do
    modified_line="${line//$tmp_path/}"
    echo "$modified_line" >> "$no_pwd_path"
done < "$part2_all_path"


# detect char "/"
while IFS= read -r line; do
    if [[ ${line:0:1} != '/' ]]; then
        modified_line="/${line}"
    else
        modified_line="${line}"
    fi
    echo "$modified_line" >> "$char_path"
done < "$no_pwd_path"


# add char "."
while IFS= read -r line; do
    modified_line=".$line"
    echo "$modified_line" >> "$repeat_path"
done < "$char_path"




# 使用awk命令对文件进行处理,只保留第一次出现的字符串
awk '!seen[$0]++' "$repeat_path" > "$part2_out_file"


#ls -l $part2_out_file

#--------------------------------------------------------------------


part1_file="part1_out_file.si"
part2_file="part2_out_file.si"
all_out_file="all_out_file.si"

# 读取part1_out_file.si文件的每一行,并将其存储到part1_lines数组中
mapfile -t part1_lines < "$part1_file"

# 创建共同拥有的字符串数组和各自独立拥有的字符串数组
declare -a common_strings
declare -a unique_part1_strings
declare -a unique_part2_strings

# 检查part1_out_file.si文件的每一行是否在part2_out_file.si文件中存在,根据情况将其添加到相应的数组中
for part1_line in "${part1_lines[@]}"; do
    if grep -qFx "$part1_line" "$part2_file"; then
        common_strings+=("$part1_line")
    else
        unique_part1_strings+=("$part1_line")
    fi
done

# 读取part2_out_file.si文件的每一行,并将其与common_strings数组进行比较,将独立拥有的字符串添加到相应的数组中
mapfile -t part2_lines < "$part2_file"
for part2_line in "${part2_lines[@]}"; do
    if ! grep -qFx "$part2_line" "$part1_file"; then
        unique_part2_strings+=("$part2_line")
    fi
done

# 将共同拥有的字符串、part1_out_file.si独立拥有的字符串和part2_out_file.si独立拥有的字符串整合到all_out_file.si文件中
{
    echo "共同拥有的字符串:"
    printf "%s\n" "${common_strings[@]}"
    echo
    echo "part1_out_file.si独立拥有的字符串:"
    printf "%s\n" "${unique_part1_strings[@]}"
    echo
    echo "part2_out_file.si独立拥有的字符串:"
    printf "%s\n" "${unique_part2_strings[@]}"
} > "$all_out_file"

echo "整合结果已保存到 $all_out_file 文件中。"



#--------------------------------------------------------------------

all_out_file="all_out_file.si"
final_out_file="final_out_file.si"

# 从all_out_file.si文件中读取每一行字符串,并剔除不是以"."字符开头的行
grep '^\.' "$all_out_file" > "$final_out_file"

echo "剔除非\".\"开头的字符串后的结果已保存到 $final_out_file 文件中。"

ls -l $final_out_file

在 Makefile 文件中,make cleanmake distclean 是常见的用于清理构建过程中生成的文件的标。

  1. make clean:这个目标通常用于清理编过程中生成的中文件和目标文件,但保留用户自定义的配置选项和生成的执行文件。它会删除编译过程生成的临时文件,例如目标文件.o)、预处理文件(.i)和编译器生成的其他间文件。这样可以确保下次构建时从干净状态开始,而不会受到前构建过程中遗留的文件的影响。

  2. make distclean:这个目标通常于更彻底地清理构过程中生成的文件,包括用户自定义的配置选项生成的可执行文件。它会执行 make clean 的操作,并进一步删除由配置过生成的文件,例如配置脚本生成的 Makefile、配置头文件等。这样可以还源代码目录到一个类似初始状态的状态,以便重新进行完整的配置和构建。

总结来,make clean 用于清理编译过程中生成的时文件,而 make distclean 则更彻底地清理构建过程中生成文件,包括用户自定义的配置选项和生成可执行文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值