- #!/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})\\n\\n" % (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_replace\\n")
- 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','%s',main_text) % lib_text
- main_text = re.sub(r'\\\\','/',main_text)
- main_text = re.sub(r'\\n\\n','\\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,dirs,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()
- #该片段来自于http://www.codesnippet.cn/detail/0307201512994.html
来源: http://www.codesnippet.cn/detail/0307201512994.html