首先,如果是C语言,需要确定是否安装了 gcc-multilib ;如果是C++,需要确定是否安装了 g++-multilib 。假设Linux平台是Ubuntu发行版,使用C++。

sudo apt install g++-multilib

然后就是对CMake的设置了。

这里分为两个部分,对整个CMake项目设置,对单个Target设置。

对单个Target

target_compile_options(${TARGET_NAME} PUBLIC $<$<PLATFORM_ID:Linux>:-m32>)
target_link_options(${TARGET_NAME} PUBLIC $<$<PLATFORM_ID:Linux>:-m32>)

为啥限定PUBLIC呢?因为Target有可能是动态库或者静态库,使用PUBLIC限定符可以使得这些选项传递到可执行文件上,毕竟32位的库也只能是32位的可执行文件使用。

对整个CMake项目

简单粗暴一点就是:(不知道有没有啥副作用,反正官方是没有给出这种方式,纯属民间科学)

if (Linux)
    # set(CMAKE_CXX_FLAGS -m32)
    add_compile_options(-m32)
    set(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -m32")
    set(CMAKE_SHARED_LINKER_FLAGS  "${CMAKE_SHARED_LINKER_FLAGS} -m32")
    set(CMAKE_MODULE_LINKER_FLAGS  "${CMAKE_MODULE_LINKER_FLAGS} -m32")
endif()

优雅点就是利用一个Interface Libraries

add_library(32bits-build INTERFACE)
target_compile_options(32bits-build INTERFACE $<$<PLATFORM_ID:Linux>:-m32>)
target_link_options(32bits-build INTERFACE $<$<PLATFORM_ID:Linux>:-m32>)
add_library(lib SHARED lib.cpp)
target_link_libraries(lib PUBLIC 32bits-build)
add_executable(main1 main1.cpp)
target_link_libraries(main PRIVATE 32bits-build)
add_executable(main2 main2.cpp)
target_link_libraries(main PRIVATE lib)
# ...

Linux上通过设置参数来达到修改对应配置,那么上述的Interface Libraries + cmake-generator-expression则可以应用在譬如设置其他编译选项(譬如-std=c++17-fPIC等等)、头文件包含目录、库文件包含目录、编译宏定义等等。

首先,如果是C语言,需要确定是否安装了gcc-multilib;如果是C++,需要确定是否安装了g++-multilib。假设Linux平台是Ubuntu发行版,使用C++。sudo apt install g++-multilib然后就是对CMake的设置了。这里分为两个部分,对整个CMake项目设置,对单个Target设置。对单个Targettarget_compile_options(${TARGET_NAME} PUBLIC $&lt;$&lt;PLATFORM_ID:Linux&gt;
cmake使用进阶版【多启动工程,多静态库链接】,此cmake工程存在两个启动程序,也就是支持两个main函数存在,可以生成两个exe,并且能在windows和linux下运行,可跨平台使用,此博客是基于另一个博客进行改进的,代码和博主的一样,只是他的工程在windows下编译不通过,于是自己研究,并新增了支持多启动工程的方法。 博客链接为:https://blog.csdn.net/shejun6/article/details/110120975
char *c1[] = {"Red","Green","Blue"}; char c2[][6] = {"Red","Green","Blue"}; 32 位系统中下面哪一种说法是正确的? A. sizeof(c1)加4 等于sizeof(c2) B. sizeof(c1)加6 等于sizeof(c2) C. sizeof(c1)大于sizeof(c2) D. sizeof(c1)等于sizeof(c2) 本文介绍了一个跨平台的自动化构建系统 CMakelinux 上的使用方法。 CMake 是一个比 automake 更加容易使用的工具,能够使程序员从复杂的编译连接过程中解脱出来。文中通过一些例子介 绍使用 CMake 处理多源文件目录的方法、查找并使用其他开发包的方法以及生成 debug 版和 release 版程序的方法。 groupadd mysql #添加mysql组 useradd -g mysql mysql -s /bin/false #创建用户mysql并加入到mysql组,不允许mysql用户直接登录系统 mkdir -p /data/mysql #创建MySQL数据库存放目录 chown -R mysql:mysql /data/mysql #设置MySQL数据库存放目录权限 mkdir -p /usr/local/mysql #创建MySQL安装目录 cd /usr/local/src #进入软件包存放目录 tar zxvf mysql-5.6.19.tar.gz #解压 cd mysql-5.6.19 #进入目录 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc #配置 make #编译 make install #安装 rm -rf /etc/my.cnf #删除系统默认的配置文件(如果默认没有就不用删除) cd /usr/local/mysql #进入MySQL安装目录 ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql #生成mysql系统数据库 ln -s /usr/local/mysql/my.cnf /etc/my.cnf #添加到/etc目录的软连接 cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld #把Mysql加入系统启动 chmod 755 /etc/init.d/mysqld #增加执行权限 chkconfig mysqld on #加入开机启动 vi /etc/rc.d/init.d/mysqld #编辑 basedir=/usr/local/mysql #MySQL程序安装路径 datadir=/data/mysql #MySQl数据库存放目录 :wq! #保存退出 service mysqld start #启动 vi /etc/profile #把mysql服务加入系统环境变量:在最后添加下面这一行 export PATH=$PATH:/usr/local/mysql/bin :wq! #保存退出 source /etc/profile #使配置立刻生效 下面这两行把myslq的库文件链接到系统默认的位置,这样你在编译类似PHP等软件时可以不用指定mysql的库文件地址。 ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql ln -s /usr/local/mysql/include/mysql /usr/include/mysql mkdir /var/lib/mysql #创建目录 ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock #添加软链接 mysql_secure_installation #设置Mysql密码,根据提示按Y 回车输入2次密码
C/C++从零开始的CMake教程 如果你有过在linux系统上源码安装某款软件的经历,那么肯定对这三部曲一点都不会陌生——配置(configure)、编译(make)、安装(make install)。几乎每次都是机器人般的操作,这背后其实是make(准确地说应该是GNU Make)在默默为你干了不少活。 1.编译hello.c——单一源文件的编译 //hello.c #include int main(){ puts("hello, world!"); return 0; 为了编译生成对应的可执行文件,你可能会使用下面的命令: $ cc -o hello h
  咱们常用命令【cmake ..】在build目录下配置生成项目和解决方案。 其实,这个命令还有其他用法。   指定CMakeLists.txt中的变量值。比如 , fmt 库 的CMakeLists.txt中有一个变量 【BUILD_SHARED_LIBS】,可以在命令行指定其值: cmake-DBUI...
+# Uncomment the following line to debug the make system: +set(CMAKE_VERBOSE_MAKEFILE ON) diff --git a/CMakeLists.txt b/CMakeLists.txt +add_compile_options("-m32") +add_link_options("-m32") | 代码图| C ++ | 痛饮| Python 3 | .Net核心| Java | CI | 执照| 这是一个完整的示例,说明如何使用SWIG代码生成器创建Modern CMake C ++项目,以生成Python,.Net和Java的包装程序和包。 该项目应在GNU / Linux,MacOS和Windows上运行。 您可以找到有关C ++ , Swig , Python 3 , .Net Core和Java的详细文档。 注意:您应该先阅读C ++和Swig ,因为其他语言只是C ++的swig生成的包装器。 项目布局如下: CMakeLists.txt基于CMake的构建的顶级。 cmake子级CMake文件。 ci根目录,用于持续集成。 Foo库的Foo根目录。 咱们常用命令【cmake ..】在build目录下配置生成项目和解决方案。 其实,这个命令还有其他用法。 指定CMakeLists.txt中的变量值。比如 , fmt 库 的CMakeLists.txt中有一个变量 【BUILD_SHARED_LIBS】,可以在命令行指定其值: 复制cmake -DBUILD_SHARED_LIBS=TRUE .. 对比可知,多了中间指定变量的命令, 其他没有变化。 2.指定编译器版本 3. 在该目录下创建一个CMakeLists.txt文件,用于配置编译选项。 4. 在CMakeLists.txt文件中,设置交叉编译工具链的路径和编译选项,例如: set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER /path/to/arm-linux-gnueabi-gcc) set(CMAKE_CXX_COMPILER /path/to/arm-linux-gnueabi-g++) set(CMAKE_FIND_ROOT_PATH /path/to/cross/compile/rootfs) 5. 使用cmake命令生成Makefile文件,例如: cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/path/to/install .. 6. 使用make命令编译程序,例如: 7. 使用make install命令安装程序,例如: make install 这样,就可以使用cmake交叉编译arm平台使用的程序了。
不需要git工具,也可以自动增加版本号,bat文件改一下 if exist "version.bat" (call version.bat) else (set /a REVSION=0) if "%REVSION%" == "" (set /a REVSION=0) set /a REVSION+=1 if exist "version.bat" (del /q "version.bat") (echo set REVSION=%REVSION%)>version.bat (echo #define VER_REVISION %REVSION%)>version.h 白话跨平台C++线程池实现 xiaoyezi19930328: 老哥,有ZeusFoundation源码么? 聊聊C++11标准库中堆(heap)算法的源码 _Sheepsheep: 万分感谢,终于知道为什么priority_queue传less<>是大根堆了 C++中字符编码的转换(Unicode、UTF-8、ANSI) 西风骑士团火花骑士可莉: //如果你用了UTF8<=>Unicode下面的代码,要加上: #include<locale> #include<codecvt>