cmake3安装和使用add_library

cmake3安装

CMAKE_CXX_STANDARD Cmake 3.5官方教程 _w3cschool

add_subdirectory — CMake 3.0.2 Documentation

cmake(7):find_package命令详解_cmake find_package_翔底的博客-优快云博客

CMake系列讲解(入门篇)1.6 基础命令CMake-include_directories()_cmake include directory-优快云博客

add_library()和add_executable()的区别_executable 和library-优快云博客

find_package(Boost REQUIRED)
if(Boost_FOUND)
  message("Boost Package found")
endif()

echo '[group_kdesig-cmake3_EPEL]
name=Copr repo for cmake3_EPEL owned by @kdesig
baseurl=https://copr-be.cloud.fedoraproject.org/results/@kdesig/cmake3_EPEL/epel-7-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/@kdesig/cmake3_EPEL/pubkey.gpg
repo_gpgcheck=0
enabled=1
enabled_metadata=1' >> /etc/yum.repos.d/cmake3.repo

 yum install jsoncpp -y
yum install -y cmake3
 cmake3 -v

手动安装cmake-3.17.1-Linux-x86_64.tar.gz

解压到/usr/local/cmake-3.17.1-Linux-x86_64
ln -s  /usr/local/cmake-3.17.1-Linux-x86_64/bin/cmake    /usr/local/bin/cmake

]# cmake  --version
cmake version 3.17.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).
[root@localhost cmake-3.17.1-Linux-x86_64]# 

CMake学习(六) —— if 和 else

CMake学习(六) —— if 和 else_万俟淋曦的博客-优快云博客_cmake if else

(646条消息) 让cmake显示gcc/g++的编译信息_cmake显示编译信息_Tommy_wxie的博客-优快云博客

 让make更透明些

make顺利的执行成功了,也得到了我们期待的“hello world”。但是make的信息太简单了,感觉空落落的。以前的Makefile可都是打印出gcc 等详细编译过程的哦。

不要担心,make的时候加个参数就行了。

make VERBOSE=1

这样你就可以在编译信息里面看到你想要的详细的gcc/g++的编译参数了。比如:

[100%] Building C object CMakeFiles/hello.dir/main.c.o
/usr/bin/cc -o CMakeFiles/hello.dir/main.c.o -c /home/study/program/cmake/hello/main.c
Linking C executable hello

什么,要在make的时候写参数。太不友好了。cmake知道你懒,所以也帮你搞定了。在CMakeLists.txt里面加上这句指令就可以了。

set(CMAKE_VERBOSE_MAKEFILE ON)

cmake 添加-g 编译选项的几种方式_makefile添加编译选项-优快云博客

第一种

修改CMakelist.txt, 添加“add_definitions("-Wall -g")”行;

第二种

 执行cmake时,添加-DCMAKE_BUILD_TYPE=Debug编译选项。

cmake -DCMAKE_BUILD_TYPE=Debug ......

建议使用第二种,可以不用改变CMakelist.txt。

cmake编译生成的makefile如何打印详细信息呢
———————————

CentOS 7 源码安装 CMake 3.15.5 最新稳定版。解决

CentOS 7 安装 CMake 3.15.5 最新稳定版 | 24K PLUS

wget https://github.com/Kitware/CMake/releases/download/v3.15.5/cmake-3.15.5.tar.gz
tar -zxf cmake-3.15.5.tar.gz
cd cmake-3.15.5
./bootstrap --prefix=/usr --datadir=share/cmake --docdir=doc/cmake && make
sudo make install
cmake --version

ubuntu 20.04安装(升级)cmake - 知乎 (zhihu.com)

sudo apt-get -y install libssl-dev
sudo ./configure
sudo make -j8 
sudo make install
cmake --version

卸载
sudo make uninstall

(525条消息) cmake笔记_cmake deprecation warning at cmakelists.txt:1 (cma_森明帮大于黑虎帮的博客-优快云博客

现在使用cmake的项目越来越多,学习了解下。

其实,cmake和autotools正是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。

#CMAKE_SOURCE_DIR是cmake内置变量表示当前项目根目录

Modern CMake 简介 - 知乎

CMake

百度安全验证

CMake使用入门笔记( 1 ) BuildSystem的三个指令 --- 更新中 - error408 - 博客园

接着在同级目录下创建cmake文件 CMakeLists.txt

为了代码干净,同级目录下创建build目录,进入build目录,执行“cmake ./”命令来生成Makefile文件,接着执行命令make编译,最后build目录下生成二进制文件example_01, 执行程序可以输出打印信息。

mkdir build
cd build
cmake ../
make


-B build   -B <path-to-build> 指定Build Tree路径,不存在则创建
cmake . -Bbuild                                               

vi ./CMakeFiles/viid_server.dir/build.make

找到

/opt/rh/devtoolset-7/root/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/viid_server.dir/mnt/hgfs/liantong/code/nvr-server/03-server/xxxxx/source/xxxxx.cpp.o -c /mnt/hgfs/liantong/code/nvr-server/03-server/xxxxx/source/xxxx.cpp
./CMakeFiles/viid_server.dir/flags.make:CXX_INCLUDES = -

./CMakeFiles/viid_server.dir/DependInfo.cmake:  "../../../../common_tool/plan/plan"

排错

CmakeLists编写

Cmake知识----编写CMakeLists.txt文件编译C/C++程序 - horsetail - 博客园

CMakeLists编写_lanlian7的博客-优快云博客_cmakelist怎么写

C++ 项目 使用 CMAKE 和 GOOGLE TEST(傻瓜式教程)

C++ 项目 使用 CMake 和 Google Test(傻瓜式教程) - 灰信网(软件开发博客聚合)

./CMakeFiles/xxxxx.dir/link.txt:目录里查找  使用到的lxxx库

vim ./CMakeFiles/xxxxx.dir/depend.make   查找依赖的头文件

t.dir/depend.make:CMakeFiles/secret.dir/mnt/hgfs/liantong/code/nvr-server/03-server/common_tool/secret/source/secret.cpp.o: ../../include/secret.h
./CMakeFiles/secret.dir/DependInfo.cmake:# The include file search paths:
./CMakeFiles/secret.dir/DependInfo.cmake:  "../../include"
./CMakeFiles/secret.dir/DependInfo.cmake:  "../../../../../01-common/include/system"
./CMakeFiles/secret.dir/DependInfo.cmake:  "../../../../../01-common/include/cbb"
./CMakeFiles/secret.dir/DependInfo.cmake:  "../../../base/include"
./CMakeFiles/secret.dir/flags.make:CXX_INCLUDES = -I/mnt/hgfs/liantong/code/nvr-server/03-server/common_tool/secret/prj_linux/../include -I/mnt/hgfs/liantong/code/nvr-server/03-server/common_tool/secret/prj_linux/../../../../01-common/include/system -I/mnt/hgfs/liantong/code/nvr-server/03-server/common_tool/secret/prj_linux/../../../../01-common/include/cbb -I/mnt/hgfs/liantong/code/nvr-server/03-server/common_tool/secret/prj_linux/../../base/include 
[root@localhost build]# vim ./CMakeFiles/secret.dir/build.make
[root@localhost build]# 

查找宏定义

g]# grep  USE_CUT_FRAME ./  -rs
./CMakeCache.txt:USE_CUT_FRAME:UNINITIALIZED=true
./CMakeFiles/gbplat.dir/DependInfo.cmake:  "USE_CUT_FRAME"
./CMakeFiles/gbplat.dir/flags.make:CXX_DEFINES = -DCROW_CHANGE -DUSE_CUT_FRAME -D_DEBUG -D_LINUX_
[root@localhost build-debug]# 
 

.o: undefined reference to symbol 'pthread_rwlock_destroy@@GLIBC_2.2.5'

添加-lpthread

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Wall -std=c++17")

指定输出路径
set(EXECUTABLE_OUTPUT_PATH ${CURDIR})
#set(EXECUTABLE_OUTPUT_PATH ${CURDIR}/../../)


cmake添加相对路径
GET_FILENAME_COMPONENT(PARENT_DIR ${PROJECT_SOURCE_DIR} DIRECTORY)
 

cmake之 ADD_LIBRARY()

cmake之 ADD_LIBRARY()_ve2102388688的博客-优快云博客_add_library

SET(LIBHELLO_SRC hello.c)
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})

多目录工程的CmakeLists.txt编写(自动添加多目录下的文件)

https://lightsail.blog.youkuaiyun.com/article/details/70313350

cmake学习3--多个目录 多个源文件_南山二毛的博客-优快云博客

CMake--List用法

CMake--List用法 - narjaja - 博客园

<think>好的,我现在要解决用户遇到的CMake错误:无法找到源文件&#39;heatshrink/heatshrink_decoder.c&#39;。首先,我需要了解这个错误通常是由什么原因引起的。根据经验,这类错误通常与文件路径不正确或文件缺失有关。用户提到错误出现在px4_add_library.cmake的第42行,这可能是在使用add_library命令时指定的源文件路径有问题。 首先,我应该检查CMakeLists.txt中是否正确定义了heatshrink_decoder.c的路径。用户可能没有将该文件添加到项目中,或者路径拼写错误。比如,是否有一个名为heatshrink的子目录,并且该文件确实存在于该目录中?如果文件路径正确,但CMake仍然找不到,可能需要检查文件系统的大小写是否匹配,尤其是在区分大小写的系统上。 接下来,考虑文件是否被正确包含在构建过程中。用户可能没有在CMakeLists.txt中使用target_sources或add_library命令包含该文件。例如,是否有类似add_library(... heatshrink/heatshrink_decoder.c)的语句?如果路径是相对的,可能需要使用绝对路径或调整相对路径的基准目录。 另外,是否有可能该文件属于某个子模块或第三方库,而用户没有初始化或更新子模块?比如,使用git submodule initupdate来获取缺失的文件。这种情况常见于项目依赖外部仓库时,子模块未被正确初始化导致文件缺失。 如果文件确实存在但路径正确,可能需要清理构建目录并重新生成CMake缓存。有时候旧的缓存可能导致路径解析错误,执行rm -rf build然后重新cmake ..可能会有帮助。 还有可能是CMake的搜索路径设置问题。检查是否使用include_directories或target_include_directories添加了heatshrink目录所在的路径。或者,在add_library命令中是否使用绝对路径而非相对路径,导致CMake无法解析。 如果用户是从其他地方复制项目,可能文件权限或符号链接的问题导致CMake无法读取该文件。检查文件权限是否允许读取,并确认没有损坏的符号链接。 最后,如果所有检查都无误,可能需要查看px4_add_library.cmake脚本本身是否有问题,比如处理源文件列表时是否存在逻辑错误,或者变量未正确展开。可能需要在该脚本中添加调试信息,如message命令输出当前处理的文件路径,帮助定位问题。 总结可能的解决步骤:1.确认文件存在且路径正确;2.检查CMakeLists.txt中的源文件包含;3.初始化子模块;4.清理并重新生成构建;5.检查文件权限符号链接;6.调试CMake脚本。</think>针对CMake报错"无法找到源文件heatshrink/heatshrink_decoder.c",以下是分步解决方案: ### 1. 验证文件存在性 首先确认项目中存在该文件: ```bash find . -name "heatshrink_decoder.c" ``` 若文件不存在,需要从PX4源码仓库手动补充该文件[^1]: ```bash wget https://raw.githubusercontent.com/PX4/PX4-Autopilot/main/src/lib/heatshrink/heatshrink_decoder.c mv heatshrink_decoder.c ./heatshrink/ ``` ### 2. 检查CMake文件配置 在调用`px4_add_library`的CMakeLists.txt中,确保路径声明正确: ```cmake # 正确写法应包含相对路径前缀 px4_add_library(my_lib SRCS heatshrink/heatshrink_decoder.c # 确保路径前缀匹配实际目录结构 ) ``` ### 3. 处理子模块依赖(若适用) 若该文件属于git子模块: ```bash git submodule init src/lib/heatshrink git submodule update ``` ### 4. 清理构建缓存 ```bash rm -rf build/ mkdir build && cd build cmake .. ``` ### 5. 设置搜索路径 在顶层CMakeLists.txt中添加包含路径: ```cmake include_directories(${CMAKE_SOURCE_DIR}/heatshrink) ``` ### 6. 调试CMake脚本 在px4_add_library.cmake第42行前添加调试信息: ```cmake message(STATUS "Processing source files: ${SRCS}") # 打印所有源文件路径 add_library(${target} ${SRCS}) ``` ### 典型错误案例 某开发者因使用Windows系统导致路径分隔符错误: ```cmake # 错误写法(使用反斜杠) SRCS heatshrink\heatshrink_decoder.c # 应改为 SRCS heatshrink/heatshrink_decoder.c ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值