首先,如果是C语言,需要确定是否安装了
gcc-multilib
;如果是C++,需要确定是否安装了
g++-multilib
。假设Linux平台是Ubuntu发行版,使用C++。
sudo apt install g++-multilib
然后就是对CMake的设置了。
这里分为两个部分,对整个CMake项目设置,对单个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位的可执行文件使用。
简单粗暴一点就是:(不知道有没有啥副作用,反正官方是没有给出这种方式,纯属民间科学)
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 $<$<PLATFORM_ID:Linux>
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)
本文介绍了一个跨平台的自动化构建系统 CMake 在 linux 上的使用方法。 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平台使用的程序了。
白话跨平台C++线程池实现
xiaoyezi19930328:
聊聊C++11标准库中堆(heap)算法的源码
_Sheepsheep:
C++中字符编码的转换(Unicode、UTF-8、ANSI)
西风骑士团火花骑士可莉: