cmake
KingOfMyHeart
会好起来的.
展开
-
error adding symbols: DSO missing from command line
错误usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libpthread.so: error adding symbols: DSO missing from command linecollect2: error: ld returned 1 exit status原因有的博客写的是对pthread库的缺失,但是我在编译的时候都链接了。然后调整了pthread的链接顺序,然后就可以了。...原创 2021-10-18 19:35:40 · 631 阅读 · 0 评论 -
Linux上使用cmake构建工程时用ccache来加速编译
安装sudo apt-get install ccache使用 ccache_path=`command -v ccache` if [ -n "$ccache_path" ];then export CXX="$ccache_path g++" export CC="$ccache_path gcc" fi原创 2021-05-17 22:04:51 · 1914 阅读 · 0 评论 -
cmake指定第三方的编译器以及指定当前系统中的同类型不同版本的编译器
cmake指定编译器:set(TOOLCHAIN "/opt/psdk/gcc-arm-aarch64-none-linux-gnu")#指定C编译器set(CMAKE_C_COMPILER "${TOOLCHAIN}/bin/aarch64-none-linux-gnu-gcc")#指定C++编译器set(CMAKE_CXX_COMPILER "${TOOLCHAIN}/bin/aarch64-none-linux-gnu-g++")这个在交叉编译中经常使用到,使用cmake构建工程时,需要原创 2021-05-17 21:58:21 · 1008 阅读 · 0 评论 -
跟我一起写makefile(二)
上一讲提到了make是根据文件的时间戳来决定文件要不要重新编译,所以系统时间一定要正确date来查看系统时间是否正确补充几点:每一个规则中的目标,都是一个文件,也可以是一个标签每一个规则中的目标,不一定要有依赖每一个目标文件的下方可以没有命令列表...原创 2019-04-25 10:21:50 · 224 阅读 · 0 评论 -
跟我一起写makefile(一)
一、关于make和makefile的基本概念和使用:Make:是一个能自动判断一个大型程序中哪些源代码需要重新编译 的工具并且根据判断的结果自动调用编译器去编译源代码最终按照一定的顺序,将编译结果整合成可执行程序当项目中的某个文件做过修改,没有的make的情况下可能要重新编译整个项目,而make可以自动的判断哪些需要重新编译,哪些需要先进行编译,节省大量时间。makefile:可以认...原创 2019-04-14 17:24:01 · 590 阅读 · 2 评论 -
cmake设置库和可执行文件的存放路径
set(LIBRARY_OUTPUT_PATH path)set(EXECUTABLE_OUTPUT_PATH path)原创 2021-03-16 17:43:37 · 4484 阅读 · 0 评论 -
cmake错误集锦:关于include_directories()
在代码中我们可能回去这样include的一个c/c++头文件:#include "common/time/a.h"使用相对路径的方式包含引用了一个头文件,然后我们在CMakeLists.txt中这样写:include_directories( /home/xxx/project_path/common/time)编译的时候发现,编译无法通过,报代码中的a.h无法找到。解决:细心一点不难发现,确实无法找到,因为/home/xxx/project_path/common/time 下面没有c原创 2021-03-16 15:42:38 · 3799 阅读 · 1 评论 -
cmake错误集锦:add_subdirectory()
在组织公司工程目录结构时,报了一个关于add_subdirectory()的错误:add_subdirectory not give a binary directory but give source directory看名字我们就知道,该指令是需要包含当前目录下的子目录的,但是发现,当前CMakeLists.txt中却用add_subdirectory()包含了当前路径的上层某些目录A,到时报错。解决:当然是使目录A的上级CMakeLists.txt中包含编译目录A了。因为cmake都是从顶级原创 2021-03-16 15:30:03 · 4773 阅读 · 0 评论 -
cmake错误集锦:unkown arguments specified
错误描述工作中使用cmake的if语句时,出现一个错误:"STREQUAL" "x86_64"Unknown arguments specified语句是这样写的:if($ENV(COMPILING_TYPE) STREQUAL "x86_64") #...elseif() #...else() #...endif()解决方法根据报的错误是cmake解析时找不到或者不认识第一个参数是啥,具体原因不清楚,可以给第一个参数加一个小括号括起来就可以编译通过:if(($ENV(COM原创 2021-03-10 16:54:34 · 7734 阅读 · 3 评论 -
在CMakeLists.txt如何执行脚本?execute_process
execute_process(COMMAND bash SCRIPT_PATH/name.sh WORK_PATH)执行xx.sh.并且将WORK_PATH作为当前工作路径.工作中用到了记录一下,有时间来详细的学习一下.原创 2021-03-05 18:25:59 · 1685 阅读 · 0 评论 -
命令行给cmake传递参数
我们期望在编译前将一些信息缓存起来,然后用CMakeLists.txt进行构建时,希望可以访问之前缓存给cmake的变量:比如我们希望缓存TARGET_CPU,并且他的值为X86,那么我们可以在命令行或者脚本中执行一下操作:cmake -DTARGET_CPU:STRING=x86然后,我们就可以在CMakeLists.txt中使用他帮助我们完全一些逻辑:if(TARGET_CPU STREQUAL "x86") #do somethingelse() #do somethingendif原创 2021-03-03 17:46:56 · 11994 阅读 · 2 评论 -
交叉编译基本过程
脚本设置环境原创 2021-01-25 21:14:09 · 740 阅读 · 0 评论 -
cmake中add_dependencies的基本作用
假设我们需要生成一个可执行文件,该文件生成需要链接a.so b.so c.so d.so四个动态库正常来讲,我们一把只需要以下两条指令即可:ADD_EXECUTABLE(main main.cpp)TARGET_LINK_LIBRARIES(main a.so b.so c.so d.so)但是编译的时候报错,一些符号的定义找不到,而这些符号恰恰就在这几个库中,假设在a.so 和 b.so中,在上述两条指令之间加上一条指令即可编译通过:ADD_DEPENDENCIES(main a.so b.s原创 2021-01-25 20:35:02 · 29995 阅读 · 3 评论 -
CMake常用的预定义变量
PROJECT_NAME : 通过 project() 指定项目名称PROJECT_SOURCE_DIR : 工程的根目录PROJECT_BINARY_DIR : 执行 cmake 命令的目录CMAKE_CURRENT_SOURCE_DIR : 当前 CMakeList.txt 文件所在的目录CMAKE_CURRENT_BINARY_DIR : 编译目录,可使用 add subdirectory 来修改EXECUTABLE_OUTPUT_PATH : 二进制可执行文件输出位置LIBRARY_O.原创 2020-07-01 21:58:50 · 624 阅读 · 0 评论 -
使用cmake生成可执行文件以及开发中常用到的一些指令说明
#include <iostream>#include <thread>using namespace std;void ThreadFunc(){ this_thread::sleep_for(chrono::milliseconds(100)); cout<<"this thread fun over"<<endl;}...原创 2020-07-01 21:53:43 · 742 阅读 · 0 评论 -
cmake编译选项:访问私有方法
ADD_COMPILE_OPTIONS(-fno-access-control)原创 2020-04-10 18:21:42 · 591 阅读 · 0 评论 -
make -j 参数加快编译效率
对于大型项目,在使用cmake控制编译时,仅仅执行make指令效率较低,使用make -j后面跟一个数字,比如make -j4 make -j6 make -j14等。含义是 让make最多允许n个编译命令同时执行,这样可以更有效的利用CPU资源。假设我们的系统是cpu是12核,在不影响其他工作的情况下,我们可以make -j12将cpu资源充分利用起来,一般来说,最大并行任务数为cpu_n...原创 2020-04-10 17:28:10 · 20596 阅读 · 8 评论