皮皮网
皮皮网

【贷款源码1002贷款源码】【源码城官网】【开源小程序源码】使用CMake构建boost源码

来源:仙剑 复刻 源码 发表时间:2024-11-06 14:03:31

1.win下boost_1_84_0 vs2019 x64编译
2.如何使用CMake进行交叉编译

使用CMake构建boost源码

win下boost_1_84_0 vs2019 x64编译

       在Windows下编译boost_1__0使用VS x环境,使用需分步进行。源码

       首先,使用进入boost_1__0目录,源码贷款源码1002贷款源码双击bootstrap.bat生成b2.exe。使用

       接着,源码源码城官网为编译动态库,使用执行特定指令,源码目录默认安装于C:\Boost。使用

       具体指令如下:在boost_1__0目录下,源码运行./b2.exe install --toolset=msvc-.2 link=shared address-model= runtime-link=shared debug release architecture=x --build-type=complete stage。使用

       接着,源码以boost log为例,使用开源小程序源码介绍CMake工程引入步骤。源码

       打开项目文件,使用使用CMake引入boost库,芒果微课源码具体配置路径依据实际目录。

       配置完成后,打开生成的同城门店源码工程进行编译。

       通过以上步骤,成功在Windows下使用VS x环境编译boost_1__0。

如何使用CMake进行交叉编译

       cmake交叉编译配置

       å¾ˆå¤šæ—¶å€™ï¼Œæˆ‘们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译。即在你host宿主机上要生成target目标机的程序。里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等,我今天仅仅简单介绍下相关CMake在面对交叉编译的时候,需要做的一些准备工作。

        CMake给交叉编译预留了一个很好的变量CMAKE_TOOLCHAIN_FILE,它定义了一个文件的路径,这个文件即toolChain,里面set了一系列你需要改变的变量和属性,包括C_COMPILER,CXX_COMPILER,如果用Qt的话需要更改QT_QMAKE_EXECUTABLE以及如果用BOOST的话需要更改的BOOST_ROOT(具体查看相关Findxxx.cmake里面指定的路径)。CMake为了不让用户每次交叉编译都要重新输入这些命令,因此它带来toolChain机制,简而言之就是一个cmake脚本,内嵌了你需要改变以及需要set的所有交叉环境的设置。

        toolChain脚本中设置的几个重要变量

        1.CMAKE_SYSTEM_NAME:

       å³ä½ ç›®æ ‡æœºtarget所在的操作系统名称,比如ARM或者Linux你就需要写"Linux",如果Windows平台你就写"Windows",如果你的嵌入式平台没有相关OS你即需要写成"Generic",只有当CMAKE_SYSTEM_NAME这个变量被设置了,CMake才认为此时正在交叉编译,它会额外设置一个变量CMAKE_CROSSCOMPILING为TRUE.

        2. CMAKE_C_COMPILER:

       é¡¾åæ€ä¹‰ï¼Œå³C语言编译器,这里可以将变量设置成完整路径或者文件名,设置成完整路径有一个好处就是CMake会去这个路径下去寻找编译相关的其他工具比如linker,binutils等,如果你写的文件名带有arm-elf等等前缀,CMake会识别到并且去寻找相关的交叉编译器。

        3. CMAKE_CXX_COMPILER:

       åŒä¸Šï¼Œæ­¤æ—¶ä»£è¡¨çš„是C++编译器。

        4. CMAKE_FIND_ROOT_PATH:

       æŒ‡å®šäº†ä¸€ä¸ªæˆ–者多个优先于其他搜索路径的搜索路径。比如你设置了/opt/arm/,所有的Find_xxx.cmake都会优先根据这个路径下的/usr/lib,/lib等进行查找,然后才会去你自己的/usr/lib和/lib进行查找,如果你有一些库是不被包含在/opt/arm里面的,你也可以显示指定多个值给CMAKE_FIND_ROOT_PATH,比如

       set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)

       è¯¥å˜é‡èƒ½å¤Ÿæœ‰æ•ˆåœ°é‡æ–°å®šä½åœ¨ç»™å®šä½ç½®ä¸‹è¿›è¡Œæœç´¢çš„根路径。该变量默认为空。当使用交叉编译时,该变量十分有用:用该变量指向目标环境的根目录,然后CMake将会在那里查找。

        5. CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:

       å¯¹FIND_PROGRAM()起作用,有三种取值,NEVER,ONLY,BOTH,第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找,第二个表示只在这个路径下查找,第三个表示先查找这个路径,再查找全局路径,对于这个变量来说,一般都是调用宿主机的程序,所以一般都设置成NEVER

        6. CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:

       å¯¹FIND_LIBRARY()起作用,表示在链接的时候的库的相关选项,因此这里需要设置成ONLY来保证我们的库是在交叉环境中找的.

        7. CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:

       å¯¹FIND_PATH()和FIND_FILE()起作用,一般来说也是ONLY,如果你想改变,一般也是在相关的FIND命令中增加option来改变局部设置,有NO_CMAKE_FIND_ROOT_PATH,ONLY_CMAKE_FIND_ROOT_PATH,BOTH_CMAKE_FIND_ROOT_PATH

        8. BOOST_ROOT:

       å¯¹äºŽéœ€è¦boost库的用户来说,相关的boost库路径配置也需要设置,因此这里的路径即ARM下的boost路径,里面有include和lib。

        9. QT_QMAKE_EXECUTABLE:

       å¯¹äºŽQt用户来说,需要更改相关的qmake命令切换成嵌入式版本,因此这里需要指定成相应的qmake路径(指定到qmake本身)

       toolChain demo

       # this is required

       SET(CMAKE_SYSTEM_NAME Linux)

       # specify the cross compiler

       SET(CMAKE_C_COMPILER /opt/arm/usr/bin/ppc_xx-gcc)

       SET(CMAKE_CXX_COMPILER /opt/arm/usr/bin/ppc_xx-g++)

       # where is the target environment

       SET(CMAKE_FIND_ROOT_PATH /opt/arm/ppc_xx /home/rickk/arm_inst)

       # search for programs in the build host directories (not necessary)

       SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

       # for libraries and headers in the target directories

       SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

       SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

       # configure Boost and Qt

       SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)

       SET(BOOST_ROOT /opt/boost_arm)

       è¿™æ ·å°±å®Œæˆäº†ç›¸å…³toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。

相关栏目:时尚