cmakelist使用总结

支持能编译成在不同系统上运行程序的方法

我们代码就一份,但有时需要编译成arm32,有时需要编译成x86_64,或更多

1、首先先将代码定义一个名称:

#将所有的源文件列为一个集合,集合名字叫做SRC_LISTS

set(SRC_LISTS

main.cpp

A.cpp

)

这里可以不用包含头文件。

2、指定不同的编译目标

#两个编译目标,分别是BIT64,ARM32

add_executable(BIT64

${SRC_LISTS})

add_executable(ARM32

${SRC_LISTS})

如果不同编译目标的源代码还有不通,可以定义两个源代码集合,如上面的SRC_LISTS,比图还可以定义一个SRC_LISTS_ARM32,然后在编译目标中使用不同的集合。

3、指定编译目标的生成文件名称和路径

SET_TARGET_PROPERTIES(BIT64 PROPERTIES

RUNTIME_OUTPUT_DIRECTORY .../BIT64/BIN

OUTPUT_NAME ${ExeFileName}

)

SET_TARGET_PROPERTIES(ARM32 PROPERTIES

RUNTIME_OUTPUT_DIRECTORY .../ARM32/BIN

OUTPUT_NAME ${ExeFileName}

)

这里指定编译64bit的输出路径是当前路径的上级路径下的BIT64/BIN

指定ARM32的最终生成文件的路径是当前路径的上级路径下的ARM32/BIN

输出文件名均为为ExeFileName,之前可以指定,比如SET(ExeFileName abc.exe)

就是64bit和ARM32的输出的可执行文件名均为abc.exe

4、指定链接需要的库

target_link_libraries(BIT64

pthread

sqlite3

)

target_link_libraries(ARM32

Pthread_arm32

sqlite3_arm32

)

这里的库的实际名称是需要加前缀和后缀的,比如pthread,实际的库名要么是libpthread.lib,要么是libpthread.so

这里用到的BIT64和ARM32的库用不同的名字来区分,本来准备使用相同的名称放在不同的目录,但cmakelist只支持指定一个库路径:

link_directories(.../.../lib)

暂时未找到不同的目标用不同的库路径的方法,若有网友有此办法,望评论或私信告知。

相关推荐
石像鬼₧魂石1 小时前
内网渗透靶场实操清单(基于 Vulhub+Metasploitable 2)
linux·windows·学习·ubuntu
超级大只老咪2 小时前
数组相邻元素比较的循环条件(Java竞赛考点)
java
橘子真甜~2 小时前
C/C++ Linux网络编程15 - 网络层IP协议
linux·网络·c++·网络协议·tcp/ip·计算机网络·网络层
小浣熊熊熊熊熊熊熊丶2 小时前
《Effective Java》第25条:限制源文件为单个顶级类
java·开发语言·effective java
毕设源码-钟学长2 小时前
【开题答辩全过程】以 公交管理系统为例,包含答辩的问题和答案
java·eclipse
啃火龙果的兔子3 小时前
JDK 安装配置
java·开发语言
星哥说事3 小时前
应用程序监控:Java 与 Web 应用的实践
java·开发语言
派大鑫wink3 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
xUxIAOrUIII3 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home3 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法