type
status
date
slug
summary
tags
category
icon
password
编译
一个目录 多个文件
该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名
多个目录 多个文件
- 静态链接库
根目录 A 和子目录 B 里各编写一个 CMakeLists.txt 文件。
我们可以先将 B 目录里的文件编译成静态库再由根目录 A 的 main 函数调用。
add_subdirectory
:这意味着 CMake 将进入指定的子目录并执行该子目录中的 CMakeLists.txt 文件include_directories(src)
是为了让编译器知道在编译源代码时应该搜索 "src" 目录以找到相关的头文件。根目录添加 math 子目录并链接子目录生成的静态库:
指定生成 MathFunctions 静态链接库供父目录使用:
- 不使用静态库的处理
使用提升变量作用域的方式
PARENT_SCOPE 是一个标志,它告诉 CMake 将 ALL_SOURCES 变量的作用域提升到父级目录中,使得 ALL_SOURCES 变量在父级目录中也可见。
message 可以用来输出信息
编译选项
配置头文件 config.h ,由 CMake 从 config.h.in 生成
需要同时修改源文件
为了便于交互式的选择变量的值,可以使用
ccmake
命令,该命令会提供一个会话式的交互式配置界面- 上箭头和下箭头键:在不同选项之间移动。
- 左箭头和右箭头键:展开或折叠选项。
Enter
键:编辑选项的值。
c
键:配置项目。
g
键:生成项目配置文件。
安装和测试
生成的 Demo ELF文件和 MathFunctions 函数库对应 libMathFunctions.o 库文件将会被复制到
/usr/local/bin
中,而 MathFunctions.h 和生成的 config.h 文件则会被复制到 /usr/local/include
中。各种bin文件
所有用户皆可用的系统程序放在/bin
超级用户才能使用的系统程序放在/sbin
所有用户都可用的应用程序放在/usr/bin
超级用户才能使用的应用程序放在/usr/sbin
所有用户都可用的与本地机器无关的程序存放在/usr/local/bin
超级用户才能使用的与本地机器无关的程序存放在/usr/local/sbin
静态链接 和 动态链接
- 静态链接:
- 静态库文件: 通常以
.a
(在Unix/Linux系统上)或.lib
(在Windows上)为扩展名,例如my_library.a
或my_library.lib
。 - 目标文件: 这是编译后的中间文件,通常以
.o
(在Unix/Linux系统上)或.obj
(在Windows上)为扩展名,例如my_code.o
或my_code.obj
。
- 动态链接:
- 动态链接库文件(共享库): 通常以
.so
(在Unix/Linux系统上)或.dll
(在Windows上)为扩展名,例如my_library.so
或my_library.dll
。 - 目标文件: 同样以
.o
(在Unix/Linux系统上)或.obj
(在Windows上)为扩展名,例如my_code.o
或my_code.obj
,但它们通常是库的一部分,供编译动态链接库时使用。
.o
文件包含了编译后的源代码的二进制表示,每个源代码文件(.c 或 .cpp 文件)通常都会生成一个对应的 .o 文件。.a
文件和.so
文件,通常包含了多个 .o 文件的集合- URL:/article/8925aaf2-4524-495f-8f37-5e4920fca442
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!