以编程方式更改项目设置
Posted
技术标签:
【中文标题】以编程方式更改项目设置【英文标题】:programmatically alter project settings 【发布时间】:2017-10-05 12:25:11 【问题描述】:我有一个旧的 MFC 解决方案,其中包含 120 个项目。 现在我尝试用 VisualC 2017 编译它,但每个项目都会发出错误:
无法打开文件 mfc140d.lib
打开项目属性,将平台工具集改为VS2017 141,语言版本改为C++17即可修复。 但是为 120 个项目执行此操作需要很长时间,然后发布版本也是如此。我可以以编程方式更改项目文件中的哪些设置以设置这两个选项?我肯定找不到他们
【问题讨论】:
如果选择“所有配置”只需要点击120次,而不是“发布”和“调试”分别进行。否则,对一个项目进行更改,查看 .vcxproj 文件中的更改内容,然后使用您喜欢的文本编辑器进行查找/替换。 这里的关键是我认为它是 .vcproj 文件而不是 .vcxproj 文件,该死的 使用property pages。或者,切换到可编程构建系统,如 CMake。每个人都讨厌它(包括我在内),但没有其他方法可以管理复杂的构建系统。或者,稍微解释一下 Stroustrup:只有两种类型的构建系统:一种是人人都在抱怨的,另一种是没人使用的。 【参考方案1】:编写了一个 python 脚本,将 stdcpp17 和 v141 添加到 vcxproj 文件(如果不存在)。也许有人发现了它的用途:
def get_all_files(basedir):
for root, subfolders, files in os.walk(basedir):
for file in os.listdir(root):
yield root, file
def all_lines_from_file(file):
with open(file, 'r') as fd:
for line in fd.readlines():
yield line
def update_VCXPROJ():
standard = '<LanguageStandard>stdcpp17</LanguageStandard>'
toolset = '<PlatformToolset>v141</PlatformToolset>'
add1 = '<CharacterSet>MultiByte</CharacterSet>'
add2 = '<DebugInformationFormat>'
for root, file in get_all_files('c:/projects/6thcycle/sources/'):
if not file.lower().endswith('.vcxproj'):
continue
thisfile = ''
for line in all_lines_from_file('0/1'.format(root, file)):
if toolset in line or standard in line:
continue
if add1 in line:
line += ' 0\n'.format(toolset)
elif add2 in line:
line += ' 0\n'.format(standard)
thisfile += line
with open('0/1'.format(root, file), 'w') as fd:
fd.write(thisfile)
update_VCXPROJ()
【讨论】:
以上是关于以编程方式更改项目设置的主要内容,如果未能解决你的问题,请参考以下文章
在 viewDidLoad() 中以编程方式更改标签栏项目标题