查到源文件中没有使用的变量,find_notuse_variable.sh

本文介绍了一个用于查找未使用的char类型变量的Shell脚本。该脚本能够帮助开发者定位那些通过memset初始化或者仅仅定义但未实际使用的变量,特别适用于单一函数的.pc文件。请注意,此工具仅适用于char类型变量且每个.pc文件只能包含一个函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/bash


#使用方法:
#      (1) sh find_notuse_variable.sh + 路径,比如 "sh find_notuse_variable.sh ../pubs"
#      (2) sh find_notuse_variable.sh + A.pc,A.pc即某一个源文件名
#注意:本脚本只适用于
#      (1) 对char类型变量,不适用其他类型变量
#      (2) 一个.pc文件中只有一个函数的情况
#脚本结果:
#      (1)---memset  表示,进行了memset初始化,程序中未使用该变量。
#      (2)---char    表示,进行了char定义,程序中未使用该变量。




if [ $# -eq 0 ]; then
echo "默认现工作目录"
PATHSTR="."
elif [ $# -eq 1 ]; then
PATHSTR=$1
else
echo "参数输入有误,只需要输入一个参数,即路径"
return -1;
fi


echo "输入参数路径:$PATHSTR"
#相对路径转绝对路径
cd $PATHSTR
if [ $? -ne 0 ]; then
echo "路径有误,请重新输入"
return -1;
fi
JDPATH=`pwd`
cd -


echo "绝对路径:$JDPATH"


ls -l $JDPATH/*.pc | awk '{print $9}' | while read LINE
do
#echo "-----------------------------------------------"
#echo $LINE:
BZ=0
cat $LINE | grep "char" | grep "\[" | grep "\]" | awk '{print $2}' | awk -F "[" '{print $1}' | while read STR
do
COUNT=10
#cat Inbu_transCashCombination.pc | grep sHxLsh | awk -F "(" '{print $1}' | awk '{print $1}'
cat $LINE | grep "$STR" | awk -F "(" '{print $1}' | awk '{print $1}' | while read STRB
do
if [ "$STRB" = "memset" ]; then
COUNT=0
elif [ "$STRB" = "char" ]; then
COUNT=1
else
COUNT=10
fi
done


if [ "$COUNT" -eq "0" ]; then
BZ=`expr $BZ + 1`
if [ "$BZ" -eq "1" ]; then
echo "----------------------------------------------"
echo $LINE:
fi
echo "$STR---memset"
elif [ "$COUNT" -eq "1" ]; then
BZ=`expr $BZ + 1`
if [ "$BZ" -eq "1" ]; then
echo "----------------------------------------------"
echo $LINE:
fi
echo "$STR---char"
fi
done
done





include(FetchContent) include(ExternalProject) cmake_minimum_required(VERSION 3.16.0) project(SWMM5Plus VERSION 1.0.2) enable_language (Fortran) find_package (Python3 COMPONENTS Interpreter) set(testing_available ON) set(CPACK_SET_DESTDIR ON) function(check_python_dependencies module) message(STATUS "Looking for Python module '${module}'") execute_process(COMMAND pip show ${module} OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE EXIT_CODE_PIPSHOW ) if (NOT ${EXIT_CODE_PIPSHOW} EQUAL 0) set(testing_available OFF PARENT_SCOPE) message(WARNING "\nMissing Python module '${module}'\n**Testing unavailable**\nPlease run python_dependencies.sh\n") else() message(STATUS "'${module}' found") endif() endfunction() if (NOT (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" OR CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM")) message(FATAL_ERROR "Intel Fortran compiler not found. Found ${CMAKE_Fortran_COMPILER_ID} instead. This project supports Intel Fortran (ifort) and IntelLLVM (ifx).") else() message(STATUS "Detected Intel Fortran compiler: ${CMAKE_Fortran_COMPILER_ID}") endif() function(commentout IN_FILE line_num) file (STRINGS ${IN_FILE} LINES) file(WRITE ${IN_FILE} "") set(line_counter 1) foreach(LINE IN LISTS LINES) if (${line_counter} STREQUAL line_num) string(PREPEND LINE "//") endif() MATH(EXPR line_counter "${line_counter}+1") file(APPEND ${IN_FILE} "${LINE}\n") endforeach() endfunction() get_filename_component(build_configuration ${CMAKE_BINARY_DIR} NAME) if (build_configuration STREQUAL "build") set(default_build_type "Release") message(STATUS "Building inside '${build_configuration}' named folder, setting configuration as '${default_build_type}'") elseif (build_configuration STREQUAL "dwflow") set(default_build_type "Release") message(STATUS "Building inside '${build_configuration}' named folder, setting configuration as '${default_build_type}'") message(WARNING "Lines [249-252] will be commented out from 'interface/src/dwflow.c'") elseif(build_configuration STREQUAL "debug") set(default_build_type "Debug") message(STATUS "Building inside '${build_configuration}' named folder, setting configuration as '${default_build_type}'") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g -traceback -debug extended") endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -lm -lpthread -shared -fcommon") #set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -coarray=distributed -ldl") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -coarray=shared -fPIC -traceback") set(FETCHCONTENT_QUIET OFF) set(BUILD_COARRAY_NUM_IMAGES 1 CACHE STRING "Set up the number of processors to use for parallel SWMM5+.") set(BUILD_HDF5 "C:/Users/Admin/gw20250625/SWMM5plus-v-1.0.2/build/_deps/hdf5-src") set(hdf5_SOURCE_DIR "C:/Users/Admin/gw20250625/SWMM5plus-v-1.0.2/build/_deps/hdf5-src") set(HDF5_INCLUDE_DIR "C:/Users/Admin/gw20250625/SWMM5plus-v-1.0.2/build/_deps/hdf5-src/include") set(HDF5_LIB_DIR "C:/Users/Admin/gw20250625/SWMM5plus-v-1.0.2/build/_deps/hdf5-src/lib") set(json_fortran_SOURCE_DIR "C:/Users/Admin/gw20250625/SWMM5plus-v-1.0.2/build/json-fortran-src") if (DEFINED ENV{HDF5_DIR}) set(BUILD_HDF5 $ENV{HDF5_DIR}) endif() FetchContent_Declare( epaswmm5 URL https://github.com/USEPA/Stormwater-Management-Model/archive/v5.1.13.tar.gz ) FetchContent_Declare( json_fortran GIT_REPOSITORY https://github.com/jacobwilliams/json-fortran.git GIT_TAG 3ab8f98209871875325c6985dd0e50085d1c82c2 #Release 8.3.0 GIT_PROGRESS ON ) FetchContent_Declare( hdf5 GIT_REPOSITORY https://github.com/HDFGroup/hdf5.git GIT_TAG 3e847e003632bdd5fdc189ccbffe25ad2661e16f #Release 1.12.2 GIT_PROGRESS ON ) Fetchcontent_MakeAvailable(epaswmm5) FetchContent_GetProperties(json_fortran hdf5) if(NOT json_fortran_POPULATED) FetchContent_Populate(json_fortran) endif() FetchContent_Populate(hdf5) ExternalProject_Add(hdf5 SOURCE_DIR "C:/Users/Admin/gw20250625/SWMM5plus-v-1.0.2/build/_deps/hdf5-src" CONFIGURE_COMMAND FC=ifort ${hdf5_SOURCE_DIR}/configure --enable-fortran --without-zlib BINARY_DIR ${hdf5_BINARY_DIR} BUILD_COMMAND ${MAKE} COMMAND make install) set(HDF5_LIB_DIR ${hdf5_BINARY_DIR}/hdf5/lib/) set(HDF5_INCLUDE_DIR ${hdf5_BINARY_DIR}/hdf5/include/) set(HDF5_LIBRARIES ${hdf5_BINARY_DIR}/hdf5/lib/libhdf5hl_fortran.a ${hdf5_BINARY_DIR}/hdf5/lib/libhdf5_hl.a ${hdf5_BINARY_DIR}/hdf5/lib/libhdf5_fortran.a ${hdf5_BINARY_DIR}/hdf5/lib/libhdf5.a) set(BUILD_HDF5 ${hdf5_BINARY_DIR}) set(HDF5_FOUND ON) #Following sh script file(COPY ${epaswmm5_SOURCE_DIR}/src/ DESTINATION ${CMAKE_SOURCE_DIR}/interface/src) file(COPY ${CMAKE_SOURCE_DIR}/interface/api.h DESTINATION ${CMAKE_SOURCE_DIR}/interface/src) file(COPY ${CMAKE_SOURCE_DIR}/interface/api.c DESTINATION ${CMAKE_SOURCE_DIR}/interface/src) file(COPY ${CMAKE_SOURCE_DIR}/interface/api_error.h DESTINATION ${CMAKE_SOURCE_DIR}/interface/src) file(COPY ${CMAKE_SOURCE_DIR}/interface/api_error.c DESTINATION ${CMAKE_SOURCE_DIR}/interface/src) file(READ ${CMAKE_SOURCE_DIR}/interface/add_to_controls.c CONTROLS) file(READ ${CMAKE_SOURCE_DIR}/interface/add_to_funcs.h FUNCS) file(APPEND ${CMAKE_SOURCE_DIR}/interface/src/controls.c "${CONTROLS}") file(APPEND ${CMAKE_SOURCE_DIR}/interface/src/funcs.h "${FUNCS}") message(STATUS "Appended to controls.c and funcs.h") file(READ ${CMAKE_SOURCE_DIR}/interface/add_to_lid.c LIDC) file(READ ${CMAKE_SOURCE_DIR}/interface/add_to_lid.h LIDH) file(APPEND ${CMAKE_SOURCE_DIR}/interface/src/lid.c "${LIDC}") file(APPEND ${CMAKE_SOURCE_DIR}/interface/src/lid.h "${LIDH}") message(STATUS "Appended to lid.c and lid.h") if (build_configuration STREQUAL "dwflow") commentout(${CMAKE_SOURCE_DIR}/interface/src/dwflow.c 248) commentout(${CMAKE_SOURCE_DIR}/interface/src/dwflow.c 249) commentout(${CMAKE_SOURCE_DIR}/interface/src/dwflow.c 250) commentout(${CMAKE_SOURCE_DIR}/interface/src/dwflow.c 251) commentout(${CMAKE_SOURCE_DIR}/interface/src/dwflow.c 252) message(STATUS "Commented out lines [248-252] from 'interface/src/dwflow.c'") endif() file(GLOB SWMM_SOURCES ${CMAKE_SOURCE_DIR}/interface/src/*.c ${CMAKE_SOURCE_DIR}/interface/src/*.h ) file(GLOB SWMM5X_SOURCES ${json_fortran_SOURCE_DIR}/src/json_kinds.F90 ${json_fortran_SOURCE_DIR}/src/json_parameters.F90 ${json_fortran_SOURCE_DIR}/src/json_string_utilities.F90 ${json_fortran_SOURCE_DIR}/src/json_value_module.F90 ${json_fortran_SOURCE_DIR}/src/json_file_module.F90 ${json_fortran_SOURCE_DIR}/src/json_module.F90 ${CMAKE_SOURCE_DIR}/utility/*.f90 ${CMAKE_SOURCE_DIR}/special_elements/*.f90 ${CMAKE_SOURCE_DIR}/definitions/*.f90 ${CMAKE_SOURCE_DIR}/interface/c_library.f90 ${CMAKE_SOURCE_DIR}/interface/interface.f90 ${CMAKE_SOURCE_DIR}/initialization/*.f90 ${CMAKE_SOURCE_DIR}/geometry/*.f90 ${CMAKE_SOURCE_DIR}/timeloop/*.f90 ${CMAKE_SOURCE_DIR}/output/*.f90 ${CMAKE_SOURCE_DIR}/finalization/*.f90 ${CMAKE_SOURCE_DIR}/main/*.f90 ) #Targets #add_library(swmm5 SHARED # ${SWMM_SOURCES} #) set_target_properties(swmm5 PROPERTIES LINKER_LANGUAGE C CXX_STANDARD 14) add_executable(SWMM5p ${SWMM5X_SOURCES} ) target_include_directories(SWMM5p PUBLIC ${HDF5_INCLUDE_DIR} ) target_link_directories(SWMM5p PUBLIC ${HDF5_LIB_DIR} ) target_link_libraries(SWMM5p PUBLIC ${HDF5_LIBRARIES} ) add_dependencies(SWMM5p hdf5) #Testing check_python_dependencies(tornado) check_python_dependencies(tabulate) check_python_dependencies(h5py) check_python_dependencies(swmmtoolbox) # Tests defined in separate file: ctest/CMakeLists.txt if (testing_available) enable_testing() message(STATUS "Making tests available") add_subdirectory(ctest) endif() #INSTALLATION install(TARGETS SWMM5p DESTINATION bin) install(TARGETS swmm5 DESTINATION lib) #cpack set(CPACK_PACKAGE_CONTACT "NCIMM") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "NCIMM") set(CPACK_DEBIAN_PACKAGE_DEPENDS "intel-hpckit") include(CPack) 以上是我配置swmm5+的CMakeLists.txt,这样配置后,HDF5配置不成功,不能生成 HDF5.mod 文件
最新发布
06-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值