我有一些我无法找到在Visual Studio中执行的好方法:
预构建步骤调用一个代码生成器,该代码生成器生成一些稍后编译的源文件。这可以通过向项目添加空白文件(稍后用实际生成的文件替换)在有限的范围内解决,但如果我不知道名称和/或自动生成的源文件的数量,它就不起作用。我可以使用GNU make
轻松地在$(wildcard generated/*.c)
中解决此问题。如何使用Visual Studio执行类似操作?
如果不需要修改文件("make"
行为),我可以阻止预构建/后构建事件运行吗?目前的解决方法是编写一个包装器脚本,它将检查我的时间戳,这有效,但有点笨拙。
在VS之外安装外部库和标头的好方法是什么?在* nix情况下,它们通常安装在系统路径中,或位于autoconf
。我想我可以在项目设置中使用用户定义的宏指定路径,但是放置这些宏的好地方在哪里可以轻松找到并调整它们?
为了清楚起见,我知道存在更好的Windows构建系统(CMake
,SCons
),但它们通常自己生成VS项目文件,我需要将此项目集成到现有的VS中构建系统,所以我希望我只有简单的VS项目文件,而不是生成的。
答案 0 :(得分:5)
如果您需要制作行为并已习惯,可以创建visual studio makefile projects并将其包含在项目中。
如果你想减少笨重,你可以编写visual studio macros和自定义构建事件,并将它们绑定到特定的构建回调/钩子。
您可以尝试类似workspacewhiz的内容,它可以让您以可以签入的文件格式设置项目的环境变量。然后用户可以在本地更改它们。
答案 1 :(得分:4)
我已经解决了这个问题,我确实使用了自定义构建规则。
但它总是很痛苦而且效果很差。我放弃了visual studio并使用cygwin使用Makefile系统。现在好多了。
cl.exe是VS编译器的名称。
更新:我最近改用了cmake,它有自己的问题,cmake可以生成visual studio解决方案。这似乎运作良好。
答案 2 :(得分:2)
特别针对#3,我使用属性页来指定第三方库位置设置(包括路径,链接路径等)。您可以使用父级或更高级别属性表中的用户宏来指定库本身的起始点(如果它们位于公共根位置),然后使用基本路径宏为每个库定义单个工作表。它不是自动的,但它易于维护,并且每个开发人员都可以在必要时拥有不同的根目录(在我们的环境中)。
此方法的一个缺点是以这种方式构造的包含路径不包含在Visual Studio的搜索路径中(除非您复制VS的“项目和目录”设置中的定义)。我和PDC08的一些MS人员谈到了为VS2010修复这个问题,以及改进界面的一般情况,但是他们没有坚定的承诺。
答案 3 :(得分:1)
<强>(1)即可。我不知道一个简单的答案,但有一些解决方法:
1a上。如果生成的文件的内容没有冲突(即没有常见的静态标识符等),则可以向项目添加单个文件,例如AllGeneratedFiles.c,并修改生成器以附加#include“generated / file。 c“生成/ file.c时生成此文件。
1b中。或者,您可以为生成的文件创建单独的基于makefile的项目,并使用nmake构建它们。
<强>(2)即可。使用自定义生成规则而不是生成后事件。您可以通过右键单击解决方案资源管理器中的项目名称并选择自定义生成规则来添加自定义生成规则。
<强>(3)即可。没有标准的方法可以做到这一点;它必须在每个项目的基础上定义。一种方法是使用环境变量来定位外部依赖项。然后,您可以在项目属性中使用这些环境变量。添加一个readme.txt,描述用户必须设置的所需工具和库以及相应的环境变量,并且任何人都可以轻松设置。
答案 4 :(得分:1)
根据您要执行的操作,您有时可以使用自定义构建步骤并正确设置依赖项。将所有生成的代码放入自己的项目中然后让主项目依赖它可能会有所帮助。