本文介绍: 此时可以使用cmake中的函数存储这些源文件。只需要在CMakeLists.txt中添加所依赖的.cpp文件,编译步骤和上面相同。有时编译程序时想添加一些编译选项,如-Wall,-std=c++11等,可以使用。此时在当前目录新增两个依赖,并mian函数的执行需要依赖这两个文件。1、在官网下载cmake的安装包,这里我下载的是v3.26。4、此时已经安装完成,可以在shell中使用cmake命令。2、找到下载的sh文件,并使用bash来执行sh脚本。对于集中的头文件,CMake提供了一个很方便的函数。
目录
一、cmake安装
wget https://github.com/Kitware/CMake/releases/download/v3.26.0-rc4/cmake-3.26.0-rc4-linux-x86_64.sh
bash cmake-3.26.0-rc4-linux-x86_64.sh
3、然后把cmake/bin/cmake软链接到/bin目录下
ln -s /root/download/cmake-3.26.0-rc4-linux-x86_64/bin/cmake /bin/cmake
二、使用cmake来配合程序的编译
一、只有一个源文件的程序编译
#include <iostream> using namespace std; int main() { cout << "Hello 今天是2023/2/26" << endl; return 0; }
CMakeLists.txt (注意CMakeLists大小写,不要写错了)
cmake_minimum_required (VERSION 2.8) project (learn_cmake) add_executable(hello hello.cpp)
[root@centOS learn_cmake]# cmake . CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. -- The C compiler identification is GNU 8.3.1 -- The CXX compiler identification is GNU 8.3.1 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /opt/rh/devtoolset-8/root/usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /opt/rh/devtoolset-8/root/usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done (1.0s) -- Generating done (0.0s) -- Build files have been written to: /root/learn_cmake
二、同一目录下多个源文件
三、同一目录下很多源文件
四、头文件在别的文件夹
五、头文件源文件分离,并含有多个文件夹
六、生成动态库和静态库
解释一下:
- PROJECT_BINARY_DIR是cmake系统变量,意思是执行cmake命令的目录,我们计划在build目录下执行cmake命令,所以这个变量也就等同于build目录
add_library(lib_name STATIC/SHARED src) # 函数作用:生成库。 # 参数lib_name:是要生成的库名称, # 参数STATIC/SHARED:指定生成静态库或动态库, # 参数src:指明库的生成所需要的源文件
- set_target_properties重新定义了库的输出名称,如果不使用set_target_properties也可以,那么库的名称就是add_library里定义的名称。具体可以参考官方文档。
- LIBRARY_OUTPUT_PATH 是cmake系统变量,项目生成的库文件都放在这个目录下。这里我指定库生成到lib目录。
开始编译:
出现库文件就算编译成功
七、链接库文件
我们已经在lib目录下生成了库文件,下面我们写一个main函数来使用库文件
此时 CMakeLists.txt 可以这样写
解释一下:
- EXECUTABLE_OUTPUT_PATH是cmake系统变量,意思是生成的可执行文件的的目录,我这里把他改为bin目录,因此生成的可执行性文件会出现在bin目录中。
find_library(var lib_name lib_path1 lib_path2) # 函数作用:查找库,并把库的绝对路径和名称存储到第一个参数里 # 参数var:用于存储查找到的库 # 参数lib_name:想要查找的库的名称,默认是查找动态库,想要指定查找动态库或静态库 # 可以加后缀,例如 funcname.so 或 funcname.a # 参数lib_path:想要从哪个路径下查找库,可以指定多个路径
target_link_libraries(target lib_name) # 函数作用:把库lib_name链接到target可执行文件中
八、CMake其他功能
一、添加编译选项
有时编译程序时想添加一些编译选项,如-Wall,-std=c++11等,可以使用add_compile_options来进行操作,例如:
原文地址:https://blog.csdn.net/iuu77/article/details/129229361
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_27266.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。