很多时候,我们写代码,是在wndows下面用vc写的,但是又需要到linux系统或者其他unix系统上编译,还需要另外写makefile文件,很麻烦,下面这个工具,可以直接从vcproj中读取文件,生成编译命令进行编译。。。。不用再写烦人的makefile了。。。工具还不完善,后面有时间继续完善它。。。。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from xml.dom import minidom
import sys
import re
import os
class TOptions:
def __init__(self):
incDirs = ''
libDirs = ''
libs = ''
preDefines = ''
outFile = ''
outDir = ''
srcfiles = []
if __name__ == '__main__':
#print sys.argc
print sys.argv
oFile = file('tclient.vcproj', 'r')
data = ''
lines = oFile.readlines()
lines[0] = lines[0].replace('"gb2312"', '"utf-8"')
data = data.join(lines)
oFile.close()
data = data.decode('gb2312').encode('utf-8');
lstEnv = []
lstEnv = re.findall(r'\$\(\w*\)'.encode('utf-8'), data)
for env in lstEnv:
print env[2:-1]
data = data.replace(env, os.getenv(env[2:-1], env))
data = data.replace('\\', '/');
option = TOptions()
xmldoc = minidom.parseString(data)
xmlConf = xmldoc.getElementsByTagName('Configuration')
for conf in xmlConf:
print conf.attributes['Name'].value
print conf.attributes['OutputDirectory'].value
if conf.attributes['Name'].value.find('Debug') >= 0:
print 'Debug do nothing...'
continue
option.outDir = conf.attributes['OutputDirectory'].value
for tool in conf.childNodes:
if 1 == tool.nodeType:
if 'VCCLCompilerTool' == tool.attributes['Name'].value:
print '--compile...'
print tool.attributes['AdditionalIncludeDirectories'].value
print tool.attributes['PreprocessorDefinitions'].value
option.incDirs = tool.attributes['AdditionalIncludeDirectories'].value
option.preDefines = tool.attributes['PreprocessorDefinitions'].value
if 'VCLinkerTool' == tool.attributes['Name'].value:
print '--link...'
print tool.attributes['AdditionalDependencies'].value
print tool.attributes['AdditionalLibraryDirectories'].value
print tool.attributes['GenerateDebugInformation'].value
print tool.attributes['OutputFile'].value
option.libs = tool.attributes['AdditionalDependencies'].value
option.libDirs = tool.attributes['AdditionalLibraryDirectories'].value
option.outFile = tool.attributes['OutputFile'].value.rstrip('.exe')
option.srcfiles = []
files = xmldoc.getElementsByTagName('File')
for file in files:
srcfile = file.attributes['RelativePath'].value
option.srcfiles.append(srcfile)
ds = option.preDefines.split(';')
ds1 = []
for d in ds:
if 'WIN32' == d:
d = 'LINUX'
d = '-D' + d
ds1.append(d)
option.preDefines = ' '.join(ds1)
print option.preDefines
incDir = option.incDirs.split(';')
incDir1 = []
for inc in incDir:
inc = '-I' + inc
incDir1.append(inc)
option.incDirs = ' '.join(incDir1)
print option.incDirs
libDir = option.libDirs.split(';')
libDir1 = []
for dir in libDir:
dir = '-L' + dir
libDir1.append(dir)
option.libDirs = ' '.join(libDir1)
print option.libDirs
libs = option.libs.split(' ')
libs1 = []
for lib in libs:
lib = '-l' + lib.rstrip('.lib')
libs1.append(lib)
libs1.append('-lc') #linux下两个默认库
libs1.append('-ldl')
option.libs = ' '.join(libs1)
print option.libs
print '..................'
compileLine = option.preDefines + ' -c -g -pthread -fPIC ' + option.incDirs
print compileLine
#创建目标目录
print option.srcfiles
cppfiles = []
objfiles = []
if False == os.access('obj', os.F_OK):
os.mkdir('obj')
else:
#判断cpp文件的时间戳与.o文件的时间戳
for srcfile in option.srcfiles:
objfile = 'obj/' + srcfile.rstrip('.cpp').lstrip('./') + '.o'
if os.stat(srcfile).st_mtime >= os.stat(objfile).st_mtime:
cppfiles.append(srcfile)
else:
objfiles.append(objfile)
print cppfiles
for srcfile in cppfiles:
objfile = 'obj/' + srcfile.rstrip('.cpp').lstrip('./') + '.o'
target = objfile + ' ' + srcfile
objfiles.append(objfile)
cl = 'g++ -o ' + target + ' ' + compileLine
print cl
os.system(cl)
objs = ' '.join(objfiles)
link = 'g++ -g -pthread -fPIC -o ' + option.outFile + ' ' + objs + ' ' + option.libDirs + ' ' + option.libs
print link
os.system(link)
分享到:
相关推荐
它能够读取`.vcproj`文件,并将其内容转换为`.dsw`和相应的`.dsp`文件,以便于在Visual Studio 6.0环境中打开和编译。转换过程中,工具会尽可能地保留原始的编译设置、依赖关系和工程结构。 使用这个工具时,需要...
SCons是一款开源的软件构建工具,它以Python编程语言为基础,旨在替代传统的Make工具,并集成了类似autoconf/automake的功能以及编译器缓存特性,如ccache。它的核心优势在于提供了一种更简单、更可靠且更快的构建...
- Windows环境下,如果你使用Visual Studio,也可以通过修改项目文件(`.vcproj`或`.sln`)来编译x264,但配置步骤会有所不同。 在实际操作中,根据你的具体环境可能需要微调上述步骤,但基本流程是一致的。请仔细...
【VCproj转换成Makefile文件】是一个重要的编程工具,它主要功能是将Microsoft Visual Studio的项目文件(.vcproj)转换为Unix/Linux平台常用的Makefile。这个工具使得开发者能够在跨平台的开发环境中更加便捷地管理...
3. `prjconverter`: 这可能是已经编译好的可执行文件,用户可以直接运行它来进行`.vcproj`到`.dsw`的转换,无需编译源代码。 在使用这个工具时,用户可能需要按照以下步骤操作: 1. 解压缩`prjconverter_src.zip`...
"将VC工程文件转换为MAKE文件的一个工具",比如`sln2mak`,工作原理通常是读取.sln和.vcproj文件,解析其中的项目和配置信息,然后生成相应的Makefile规则。这个过程可能涉及以下步骤: 1. 解析.sln文件:识别各个...
本案例主要探讨如何使用Python调用C代码,并结合Visual Studio 2005(VS2005)创建的工程来编译生成动态链接库(DLL)或Python的扩展模块(pyd文件),供Python调用。 首先,我们需要了解Python的C API,它是Python...
generate_excel.vcproj为在vs2005下的工程文件,如果需要在vc6或Linux等其他编译环境下使用只需新建工程将.h文件和.cpp文件导入即可编译。 generate_excel |------include | |----gen_excel_file.h | |----input_...
这个小工具的主要功能是将VS2005的项目文件(.vcproj)转换为VC6.0的项目工作区文件(.dsw),使得在旧版IDE中也能打开和编译原本在VS2005中的工程。转换过程中,工具会处理源代码文件的路径、编译设置、链接器选项...
使用 Qt Creator 或 qmake 工具,可以直接编译并生成可执行文件。 法二:使用 qmake 生成项目文件 如果没有 .pro 文件,可以使用 qmake 工具生成项目文件。下面是一个示例: 1. 打开 Qt 命令窗口,cd 进入 hello....
然而,随着版本的迭代,不同版本的VC工程文件可能存在兼容性问题,使得在低版本的VC环境中无法直接打开和编译高版本创建的项目。为了应对这种问题,出现了专门的“VC工程转换工具”,如“VSProjectConverter”和...
对于SumatraPDF VS2008编译版本,这意味着源代码可能是在Visual Studio 2008环境下用C++语言编写的,然后通过该IDE的编译工具链生成了最终的可执行文件。VS2008提供了对C++03标准的良好支持,并且拥有调试器、代码...
从VS2008工程文件(.vcproj)中提取可用的QT工程文件信息,用于静态链接工程(lib),需要python解释环境运行。直接放在需要提取的工程文件文件夹下运行,在生成的RawPro文件夹中查看提取的QT工程文件信息。稍作修改...
- 工具首先读取VS工程文件,解析其中的编译单位、链接器设置等信息。 - 解析后的数据结构化,映射到Android.mk的格式,如设置LOCAL_SRC_FILES为源代码列表,LOCAL_C_INCLUDES为头文件路径。 - 工具还需处理库依赖...
sln2mak工具能够帮助我们将Visual Studio的解决方案文件(.sln)和项目文件(.vcproj)转换成相应的MAKE文件,使得非Windows环境下的开发者也能顺利编译项目。 使用sln2mak工具的步骤大致如下: 1. **下载与安装**...
读取Excel文件通常需要借助第三方库,如`libxl`、`pandas`(Python中的库,但可以与C++结合使用)或者`Microsoft Office Interop`(适用于Windows环境)。在这里,由于没有具体的代码示例,我们将以`libxl`库为例,...
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。 通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile...
2. **项目文件**:.vcproj文件,记录了工程的配置信息,如源文件列表、编译选项等。 3. **解决方案文件**:.sln文件,管理多个项目之间的依赖关系,是VC6中的顶级组织单元。 4. **资源文件**:如.rc文件,用于定义...
7. **编译与安装**:接着,使用以下命令进行编译和安装: ``` msbuild all.vcproj /p:Configuration=Release nmake -f makefile.nmake install ``` 8. **验证安装**:安装完成后,你可以通过运行`openssl ...