如何准备代码库以在基于 Windows 和 Unix 的系统上进行编译
Posted
技术标签:
【中文标题】如何准备代码库以在基于 Windows 和 Unix 的系统上进行编译【英文标题】:How to prepare a codebase for compiling on both Windows and Unix-based systems 【发布时间】:2011-02-07 15:13:31 【问题描述】:我想知道有哪些不同的解决方案可以轻松地为 windows 和 unix 编译我的跨平台应用程序。
现在我在 Ubuntu 上使用 makefile,但在我的代码库变得更大之前,我想执行在 Windows 上编译它所需的步骤,然后继续定期这样做以查看它是否仍然有效。
我最好不要用多个“makefile”解决方案(例如 VC++ 解决方案等)污染我的 SVN 代码库存储库,我想要一种更自动化的方式。我尝试将 mingw 与 make for windows 一起使用,但似乎我的 secondexpansion awesomeness 不适用于 Windows 版本(或类似的版本)。它无法编译,并且还抱怨没有定义 _winNT 或类似的东西。
我应该如何准备我的代码库以进行跨平台的轻松编译?诸如构建工具之类的东西,也许是从 makefile 自动生成 VS 文件,或者类似的东西。可能是 stdinc 文件中的一些预处理器魔法?
谢谢!
【问题讨论】:
【参考方案1】:我将为您指出CMake,它被 mysql、KDE 或 Compiz 等知名项目使用。
它能够为目标系统生成本机构建文件,例如基于 Unix 平台的 Makefiles,以及适用于 Windows 的 Visual C++ 项目和解决方案文件。
为了处理平台差异,我邀请您查看我之前关于此主题的帖子:C++: Platform dependent types - best pattern
【讨论】:
谢谢!我现在尝试使用 CMake 变得更好或更糟。当我使用 VC++ 时,它有点工作。但是,为编译器选择 MinGW 不起作用 - 它抱怨未定义 _win32。 CMake不应该为我处理这个吗?我将如何添加依赖于操作系统的 CMake 配置?感谢您的帮助! 您应该准确指出错误发生的位置。恐怕这是您的代码中的问题,因为我从来没有遇到过这种麻烦。您可以查看 code.google.com/p/flvmeta/source/browse/#svn%2Ftrunk 以获取示例 CMakeLists.txt 文件。 谢谢哥们,我让它工作了。一开始设置有点麻烦,但现在效果很好!【参考方案2】:我会去提升构建:http://www.boost.org/doc/tools/build/doc/html/index.html
您可以从命令行(Windows 上的 dos 命令提示符)选择您的平台和编译器,其他一切正常。
例如
bjam release gcc,
或
bjam debug msvc
您可以为每个编译器(如果您愿意)或不同版本的编译器添加额外的标志。
【讨论】:
郑重声明,即使是 Boost 项目也在调查 switch to CMake,所以我不会全心全意地推荐 Boost-Jam。以上是关于如何准备代码库以在基于 Windows 和 Unix 的系统上进行编译的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SuperBible 获取 GLTools 库以在 Ubuntu 中工作?或替代方案? [关闭]
修改 Android 源代码的核心 java 库以在应用程序中使用
使用 MinGW C++ 编译 64 位静态库以在 Java (JNI) 中使用