基于Python的cmake多目录工程的自动配置实现
发布时间:2020-12-17 17:04:55 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!/usr/bin/python"""2015.06.30Modified some functions.Now this configration can be run on both Windows and Linux.***************************
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #!/usr/bin/python """ 2015.06.30 Modified some functions. Now this configration can be run on both Windows and Linux. ************************************************************************************* 2015.06.29 This is a configration function code which can be only run on Win Sys Written by Grey 2015.06.29 """ #coding:utf-8 import os,shutil,re # Function DeleteCmakefilesDirectory can delete the directory generated by cmake. def DeleteCmakefilesDirectory(): try: shutil.rmtree("./CMakeFiles") except: print "cannot find the object!" # Function RemoveEmptyFolder can remove all the empty folders in pwd def RemoveEmptyFolder(): for root,dirs,files in os.walk("./"): if dirs == [] and files == []: os.rmdir(root) # Function SubDirectoryCmakelistsGen can generate a CMakeLists.txt for a subdirectory def SubDirectoryCmakelistsGen(): pwd = os.getcwd() directory_name = os.path.basename(pwd) directory_source_name = directory_name + '_DIR_SRCS' directory_lib_name = directory_name + '_lib' cmakelists_obj = open('CMakeLists.txt','w') cmakelists_obj.write("aux_source_directory(. %s)n" % directory_source_name) cmakelists_obj.write("add_library(%s ${%s})nn" % (directory_lib_name,directory_source_name)) cmakelists_obj.close() def MainCmakelistsGen(): cmakelists_obj = open('CMakeLists.txt','w') pwd = os.getcwd() directory_name = os.path.basename(pwd) directory_source_name = directory_name + '_DIR_SRCS' directory_lib_name = directory_name + '_lib' cmakelists_obj = open('CMakeLists.txt','w') cmakelists_obj.write("cmake_minimum_required(VERSION 3.3)n") cmakelists_obj.write("project(%s_prj)n" % directory_name) cmakelists_obj.write("aux_source_directory(. %s)n" % directory_source_name) cmakelists_obj.write("add_subdirectory_for_replacen") cmakelists_obj.write("add_executable(%s_bin ${%s})n" % (directory_name,directory_source_name)) cmakelists_obj.write("target_link_libraries(%s_bin all_libs_for_replace)n" % directory_name) cmakelists_obj.close() def MainCmakelistsUpdate(): main_text = open('CMakeLists.txt','r').read() include_text = open('include.txt','r').read() subdirectory_text = open('subdirectory.txt','r').read() lib_text = open('lib_list.txt','r').read() subdirectory_text = re.sub(r'add_subdirectory(./)n','',subdirectory_text) main_text = re.sub('add_subdirectory_for_replace','%s',main_text) % (include_text + 'n' + subdirectory_text) main_text = re.sub('all_libs_for_replace',main_text) % lib_text main_text = re.sub(r'','/',main_text) main_text = re.sub(r'nn','n',main_text) main_write_fid = open('CMakeLists.txt','w') main_write_fid.write(main_text) main_write_fid.close() def MainConfig(): # step1 : delete all the empty code folders RemoveEmptyFolder() # step2 : delete 'CMakeFiles' in main folder DeleteCmakefilesDirectory() # step3 : process for subdirectories subdirectories = [] sub_libs = [] pwd = os.getcwd() for root,files in os.walk("./"): os.chdir(root) DeleteCmakefilesDirectory() SubDirectoryCmakelistsGen() subdirectories.append(root) subdirectory_name = os.path.basename(root) sub_libs.append(subdirectory_name + "_lib") os.chdir(pwd) include_obj = open('include.txt','w') subdir_obj = open('subdirectory.txt','w') include_obj.write("include_directories(") for subdirectory in subdirectories: include_obj.write("%s " % subdirectory) subdir_obj.write("add_subdirectory(%s)n" % subdirectory) include_obj.write(")") include_obj.close() subdir_obj.close() # step4 : try to generate main CMakeLists.txt MainCmakelistsGen() lib_flag = 0 lib_list_obj = open('lib_list.txt','w') for each_sub_lib in sub_libs: if lib_flag != 0: lib_list_obj.write("%s " % each_sub_lib) lib_flag += 1 lib_list_obj.close() MainCmakelistsUpdate() MainConfig() 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |