关于使用本机 Visual C++ 项目与 makefile 项目的意见

Posted

技术标签:

【中文标题】关于使用本机 Visual C++ 项目与 makefile 项目的意见【英文标题】:opinion on using native Visual C++ projects vs makefile project 【发布时间】:2011-01-28 01:09:34 【问题描述】:

我正在开发一个包含 Visual C++(绝大多数)和 XCode 开发人员的跨平台 C/C++ 代码库。它还需要在 Linux 上编译,因为这是它的部署位置。我们目前正在使用从 Visual C++、XCode 和 Unix 命令行调用的复杂 Unix makefile。

但是,makefile 项目对 Visual C++ 开发人员造成了一些生产力损失:

    构建时间变慢 智能感知和文本搜索不适用于项目中未直接引用的文件 不生成 .h 依赖项(不清楚如何在 Windows 上执行)

添加原生 Visual C++ 项目有以下缺点:

    如here 所述,管理所有这些单独的平台配置需要做大量工作,也许 VC++ 2010 的分层属性表会有所帮助。 由于将 makefile 与本机项目同步,工作量更大

目前,我正在考虑为 Windows 开发人员添加一个原生项目。谁能提供他们最好的经验或建议如何减少这两种方法的这些问题。

我已经考虑过 CMake 并且个人会使用它,但是很难说服其他人学习 cmake 并且将其与本地项目同步将是一个问题。

【问题讨论】:

如果你喜欢浪费时间,CMake 只是一个问题。那些喜欢维护复杂的 makefile 系统的人绝对会讨厌它,因为它要求他们放下繁忙的工作并做一些重要的事情。 【参考方案1】:

我已经考虑过 CMake 并且个人会使用它,但是很难说服其他人学习 cmake 并且将其与本地项目同步将是一个问题。

CMake 的好处在于它可以为您构建所有配置。您将设置一个 CMake 项目,然后使用它为您生成 VS 解决方案、XCode 项目和 unix makefile。

这是一个巨大的进步 - 每个人都可以在他们的“本地”环境中工作,无论他们是在 Windows、Mac 还是 Unix 上。

【讨论】:

它允许你倒退吗?即,如果您通过 Visual Studio 添加内容,您可以让 CMake 将更改同步回全局项目吗? 不,它不允许同步回来。把它想象成你当前的 makefile 实现。你改变你的 CMakeLists.txt 一次,提交。大家重建。完成。 @Keith:是的——你必须学会​​编辑 CMakeLists.txt 文件。一旦你把它搞定了,它就超级简单了......它还做了一些与源代码外构建相关的好事情,这在跨平台工作以保持源代码控制干净时非常好......【参考方案2】:

我通过编写自己的转换器来处理这个问题,该转换器可以为各种嵌入式开发环境同步脚本。如果使用 CMake 的上述答案为您完成了所有这些,那么这就是要走的路。但如果它太复杂,滚动你自己的自定义工具并不难。只需双向同步即可。

另外,如果你没有它。 Visual Studio 的 Visual Assist 很棒:)

【讨论】:

【参考方案3】:

我不喜欢 makefile 生成器、cmakeqmake 等。

我是make的粉丝。我们有一个单一的 makefile(实际上是几个,但它们相互包含,并且不涉及递归 make),它知道所有平台(windows、wince、linux、mac ......)上的所有项目依赖关系。这给出了:

Makefile 实际上只是一个源列表(包含依赖项是在构建过程中自动生成的) 除了指定工具链之外,每个平台上的构建命令相同 构建使用了我所有的 CPU 无所事事的时间很短 开发人员可以使用他们喜欢的任何 IDE vim、emacs、qtcreator、eclipse、XCode 全部在用 我经常在 Windows 上使用 VC++(用于调试器) 可编写脚本。自动化测试的好方法

不错。

【讨论】:

以上是关于关于使用本机 Visual C++ 项目与 makefile 项目的意见的主要内容,如果未能解决你的问题,请参考以下文章

如何减少用本机 Visual C++ 编写的大型项目的链接时间?

是否在CLR上运行非托管Visual C ++?

针对 Visual Studio 2012 本机 C++ 测试从命令行运行 mstest

窗体头文件中的“错误 C2653:系统不是类或命名空间名称”,Visual C++

Visual Studio 混合项目调试

使用 Visual Studio 将 HTML 浏览器嵌入到本机 C++/Win32 项目中