2024-09-28 14:24:04 +08:00
|
|
|
|
import json
|
|
|
|
|
import os
|
|
|
|
|
import sys
|
|
|
|
|
import time
|
|
|
|
|
|
2024-09-28 19:35:52 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
这个文件用于编译时输出编译符号,在makefile.cfg中调用
|
|
|
|
|
自动更新vscode的c/c++配置
|
|
|
|
|
|
|
|
|
|
2024.9.28
|
|
|
|
|
根据脚本位置来确定位置文件路径
|
|
|
|
|
使用非冗余的路径
|
|
|
|
|
使用宏定义字符转义
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unescape(line:str):
|
|
|
|
|
table=[("\\\"","\""),("\\<","<"),("\\>",">"),("\\$","$"),("\\(","("),("\\)",")")]
|
|
|
|
|
for item in table:
|
|
|
|
|
line=line.replace(item[0],item[1])
|
|
|
|
|
# 删除多余的 $ 符号
|
|
|
|
|
line=line.replace('$','')
|
|
|
|
|
return line
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-09-28 14:24:04 +08:00
|
|
|
|
def main(flag_file:str,target:str):
|
|
|
|
|
make_flags=flag_file
|
2024-09-28 19:35:52 +08:00
|
|
|
|
top_path=os.path.split(sys.argv[0])[0]
|
2024-09-28 14:24:04 +08:00
|
|
|
|
current_path=os.path.abspath('.')
|
|
|
|
|
if(make_flags!='clear'):
|
|
|
|
|
with open(make_flags,encoding='utf-8') as f:
|
|
|
|
|
flags=f.read()
|
|
|
|
|
print(time.strftime("%Y-%m-%d %H:%M:%S"),"append vscode setting.")
|
|
|
|
|
print('\ttarget: ',target)
|
|
|
|
|
else:
|
|
|
|
|
flags=""
|
|
|
|
|
print(time.strftime("%Y-%m-%d %H:%M:%S"),"clear vscode setting.")
|
2024-09-28 19:35:52 +08:00
|
|
|
|
cfgs_file_path=f'{top_path}/.vscode/c_cpp_properties.json'
|
2024-09-28 14:24:04 +08:00
|
|
|
|
with open(cfgs_file_path,encoding='utf-8') as f:
|
|
|
|
|
cfgs=f.read()
|
|
|
|
|
|
|
|
|
|
flags_list=flags.split()
|
|
|
|
|
flags_list=list(set(flags_list))
|
|
|
|
|
inc_list=[]
|
|
|
|
|
def_list=[]
|
|
|
|
|
for item in flags_list:
|
|
|
|
|
if(item[:2]=='-D'):
|
2024-09-28 19:35:52 +08:00
|
|
|
|
def_list.append(unescape(item[2:]))
|
2024-09-28 14:24:04 +08:00
|
|
|
|
elif(item[:2]=='-I'):
|
|
|
|
|
p=item[2:]
|
|
|
|
|
if(p[0]!='/'):
|
|
|
|
|
p=os.path.join(current_path,p)
|
2024-09-28 19:35:52 +08:00
|
|
|
|
p=os.path.normpath(p)
|
2024-09-28 14:24:04 +08:00
|
|
|
|
if(os.path.exists(p)):
|
|
|
|
|
inc_list.append(p)
|
|
|
|
|
else:
|
|
|
|
|
print("\tinvalid inc path: ",p)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cfg=json.loads(cfgs)
|
|
|
|
|
predef_info=cfg["configurations"][0]
|
|
|
|
|
if(make_flags!='clear'):
|
|
|
|
|
predef_info["name"]="myname"
|
|
|
|
|
for item in inc_list:
|
2024-09-28 19:35:52 +08:00
|
|
|
|
# 只有路径列表中不存在时才添加
|
2024-09-28 14:24:04 +08:00
|
|
|
|
if(item not in predef_info["includePath"]):
|
|
|
|
|
predef_info["includePath"].append(item)
|
|
|
|
|
for item in def_list:
|
|
|
|
|
if(item not in predef_info["defines"]):
|
|
|
|
|
predef_info["defines"].append(item)
|
|
|
|
|
else:
|
|
|
|
|
predef_info["includePath"]=[]
|
|
|
|
|
predef_info["defines"]=[]
|
|
|
|
|
|
|
|
|
|
with open(cfgs_file_path,mode='w+', encoding='utf-8') as f:
|
|
|
|
|
f.write(json.dumps(cfg,sort_keys=True, indent=2, separators=(',', ': ')))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__=="__main__":
|
|
|
|
|
if(len(sys.argv)>=2):
|
|
|
|
|
if(len(sys.argv)>=3):
|
|
|
|
|
target=sys.argv[2]
|
|
|
|
|
else:
|
|
|
|
|
target="null"
|
|
|
|
|
main(sys.argv[1],target)
|
|
|
|
|
else:
|
|
|
|
|
print("kill me.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|