我有一个c ++代码库,我需要构建windows和unix版本的。重要的是,Windows可执行文件在没有安装cygwin或类似程序的情况下工作。哦,我正试图从ubuntu实现这个目标。
我一直在试图弄清楚如何让boost-build处理它,但到目前为止还是很短暂。为简单起见假设这个项目结构:
root/
|- src/
| |- core/
| | |- number.cpp
| | |- number.hpp
| |- main.cpp
|- jamroot
为了尝试使boost-build生成Windows二进制文件作为第一步,我在我的主目录中创建了一个user-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可执行文件(没有扩展名)但不是一个Windows可执行文件。使用.exe扩展名重命名应用程序并在Windows上运行不起作用。我尝试了bjam的各种选项,例如bjam --toolset=gcc --target-os=windows
,bjam --toolset=gcc-mingw --target-os=windows
等,但注意似乎有用..
为了记录,mingw已正确安装并正常工作。手动调用编译器会生成正确的输出文件。
有什么想法吗?
另外,如何让bjam为我的user-config.jam文件中列出的每个工具集构建一个版本?
奖金问题: 最后,我需要链接一个boost库和一个自定义预构建库。我该如何为不同的目标系统指定不同的库?
更新我从http://mingw-cross-env.nongnu.org/下载了脚本,这样我就可以一次编译mingw以及提升库,这样就可以解决问题..我找到了一种方法使bjam调用mingw编译器(我在不同的计算机上,所以我目前无法提供解决方案)..其他问题仍未解决。
答案 0 :(得分:1)
不幸的是我不认为这可以做到(我多次失败)我认为原因是因为mingw不支持编译Boost。人们似乎完成此任务的唯一方法是使用MS Visual Studio在win32下维护一个单独的构建环境。
根据您的问题,目前还不清楚您是否正在使用bjam构建应用程序,或者您是否只是尝试构建Windows版本的Boost库(.lib或.dll文件)以便稍后与您的应用程序链接。在我的尝试中,我尝试以“通常”的方式执行此操作,因为Windows版本的Boost库已经编译,然后应用程序使用mingw32单独编译并与Boost链接。
不幸的是,到目前为止,我的绊脚石是我只能得到两个结果 - 编译Boost到Win32动态库(.dll)时构建失败,或者win32静态库成功构建,但是libtool refuses to link them in with the app。
查看Arch Linux用于编译mingw32-boost的PKGBUILD文件,因为您可能会从中获得一些提示。似乎bjam threadapi=win32 target-os=windows
就足够了。不要忘记正确设置前缀,因此不要使用win32版本覆盖本机库!
答案 1 :(得分:0)
在我的ubuntu框中,它就像
一样简单sudo apt-get install mingw
然后构建
export CC=i586-mingw32msvc-gcc
make
利润!