我有一个c++代码库,我需要同时构建windows和unix版本。在没有安装cygwin或类似安装的情况下,windows可执行文件的工作非常重要。哦,我正试着从ubuntu那里实现这一点。
我一直在努力弄清楚如何让boost-build来解决这个问题,但到目前为止还不够.为了简单起见,假设这个项目结构:
root/
|- src/
| |- core/
| | |- number.cpp
| | |- number.hpp
| |- main.cpp
|- jamroot作为第一步,为了使boost-build produce windows二进制文件成为第一步,我在我的主目录中创建了一个用户-config.jam文件,其中包含以下内容:
using gcc : 4.4 : i586-mingw32msvc-g++ : <rc>i586-mingw32msvc-windres <archiver>i586-mingw32msvc-ar ;我的jamroot文件如下所示:
exe hello :
[ glob-tree *.cpp ]
: : <target-os>windows
;但是当我运行bjam时,我得到一个unix可执行文件(没有扩展名),但是没有窗口可执行文件。用.exe扩展重命名应用程序并在windows上运行不起作用。我尝试了各种选择,如bjam --toolset=gcc --target-os=windows,bjam --toolset=gcc-mingw --target-os=windows等,但注意到似乎有效。
为了记录在案,mingw是正确安装和工作的。手动调用编译器将生成正确的输出文件。
有什么想法吗?
此外,如何让bjam为用户-config.jam文件中列出的每个工具集构建一个版本?
额外的问题:最终,我需要链接到一个boost库和一个定制的预构建库。如何为不同的目标系统指定不同的库?
UPDATE我从http://mingw-cross-env.nongnu.org/下载了脚本,它允许我一次编译一个混合库和boost库,所以这个问题得到了解决。我找到了一种方法让bjam调用mingw编译器(我在另一台计算机上,所以此时无法提供解决方案)。其他问题仍未解决。
发布于 2011-04-28 01:48:34
不幸的是,我不认为这是可以做到的(我已经失败了很多次),我认为原因是因为混合不支持编译Boost。人们似乎已经做到这一点的唯一方法是使用maintain在win32下维护一个单独的构建环境。
从您的问题中可以看出,您是使用bjam来构建应用程序,还是只是试图构建Boost库的库(.lib或.dll文件),以便稍后与您的应用程序链接。在我的尝试中,我尝试用“通常”的方式来做,因为Windows版本的Boost库是编译的,然后应用程序用mingw32单独编译,并与Boost链接。
不幸的是,到目前为止,我的绊脚石是,我只能获得两个结果--要么编译Boost到Win32动态库(.dll)时构建失败,要么成功构建win32静态库,然后构建libtool拒绝将它们链接到应用程序中。。
看看Arch用于编译mingw32-boost的PKGBUILD文件,因为您可能从它们的实现方式中得到一些提示。看来bjam threadapi=win32 target-os=windows就足够了。但是,不要忘记正确设置前缀,这样就不会用win32版本覆盖本地库了!
发布于 2011-04-28 08:22:42
在我的ubuntu盒子里,它很简单
sudo apt-get install mingw然后建造
export CC=i586-mingw32msvc-gcc
make 利润!
https://stackoverflow.com/questions/5758045
复制相似问题