(Boost REQUIRED) find_package(Protobuf) find_package(CURL) find_package(ZLIB) find_path(CARES_INCLUDE_DIR...(muduo/base) add_subdirectory(muduo/net) if(MUDUO_BUILD_EXAMPLES) add_subdirectory(contrib) add_subdirectory...所以解决办法很明了了,既然muduo库找不到我安装的boost1.69.0的头文件所在目录,那么我修改一下CMakeLists.txt文件,在find_package(Boost REQUIRED)这句查找...message( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}.") endif() find_package(Protobuf) find_package...(muduo/base) add_subdirectory(muduo/net) if(MUDUO_BUILD_EXAMPLES) add_subdirectory(contrib) add_subdirectory
前言DevEco Studio的native工程的C/C++部分当前只支持cmake脚本的编译,工程的目录结构如下图所示在工程中引用第三方库有如下三种方式,一、find_package模式通过find_package...,可以在指定目录下去搜索已安装的库(三方库构建完后执行install,会生成xxx-config.cmake之类的文件在安装目录下),如果可以找到对应的库,就可以获取头文件路径以及库的路径二、add_subdirectory...DevEco Studio的native工程的C/C++部分是使用的cmake脚本来构建,开源社区上有很多C/C++三方库也是使用cmake来编译构建,这些三方库我们是否可以直接采用add_subdirectory...,如下图所示find_package通过这些文件来获取库的版本、库的头文件、库的名称等信息,假如没有这些文件,find_package将会找不到库。...总结一、部分开源三方库的脚本可以在DevEco Studio上直接使用这部分开源三方库没有其他库的依赖,可以直接使用add_subdirectory引用二、有依赖的三方库的脚本不能在DevEco Studio
cmake 变量定义 name=… set(name, “…”) 环境检测 find_library(lib libname pathllist) find_package(packename...) find_path(var name pathlist) find_program(var name pathlist) 子目录 add_subdirectory(list) 可执行文件...的方式 find_package(CURL REQUIRED) //通过FindCURL.cmake查找 include_directories(${CURL_INCLUDE_DIR})...target_link_libraries(curltest ${CURL_LIBRARY}) 构建过程中生成,模块.dir和每个模块的编译文件 关联多个cmake项目使用add_subdirectory..., 子项目去掉add_subdirectory,否则出现target exsit错误 子项目去掉project项目名称,避免cmake中重复(不报错) demo include_directories(
第一个必填参数name,就是我们要编译的可执行程序target的名称; 可选参数WIN32、MACOS_BUNDLE。分别用于Windows平台和macOS平台可执行应用程序的构建。...可选参数EXCLUDE_FROM_ALL,表明整个项目构建的时候,排除当前这个target; 至于source等等就是头文件、源码文件了。...但是如没有必要,尽可能使用target_xxx来给指定的target配置。举一反三,CMake中还有很多的target_开头的指令,其目的都是针对某个指定的target的配置。...关于find_package,网上解析的文章很多,这里只简单说明下,CMake官方文档中提到find_package有两种搜索模式,其中一种就是模块搜索模式(Module mode),该搜索模式说明如下...libcef_dll/CMakeLists.txt 现在,让我们回到cef_binary_xxx/CMakeLists.txt,在find_package(CEF)之后,紧接着的就是add_subdirectory
:工程名需要大写版本号需要标明主版本号,次版本号以及补丁版本号,如: project(PROJECT_NAME VERSION 0.0.0) PROJECT_NAME工程的版本号时 0.0.0,该版本号会被三个...,比如CXX表示可以编译C++文件;C表示可以编译c文件;ASM表示可以编译汇编文件enable_language(CXX C ASM)配置测试用例可选变量配置自定义变量,默认不构建测试用例,可以由使用者通过传入参数打开测试用例构建选项...构建脚本,直接通过add_subdirectory()引用该三方库 add_subdirectory(xxx) # xxx是需要引入的三方库源码文件夹名字源码非cmake构建或者无法通过cmake...引用当前源码路径下的xxx库使用find_package方法来引用,此方法的使用限制参照IDE上find_package使用分析,使用方法: find_package(XXX REQUIRED)...库对外提供被find_package的能力install后,所有导出的头文件、动态库、静态库、可执行二进制、cmake文件都可以安装到指定路径下install(TARGETS ${TARGET_NAME
windows代码在分支中可以看到 依赖openssl:https://gitee.com/mirrors/openssl.git,源码中没有openssl-config.cmake workflow的cmake...find_package(openssl require) 改为 set(OPENSSL_INCLUDE_DIR e:/opensource/openssl/include) find_library...(snappy) find_package(openssl) find_package(protobuf) find_package(workflow) 改为 add_subdirectory.../third_party/snappy) 去掉snappy中的googletest和benchmark set(OPENSSL_INCLUDE_DIR e:/opensource/openssl/include...unset(name, CACHE) find_package、find_file等不会遍历文件夹,可以使用file(GLOB_RECURSE,…)
后面的紧接的四个ADD_SUBDIRECTORY指令,是指CMake指令顺序进入四个路径中,顺序执行几个路径中的CMakeLists.txt文件。 这里笔者认为可以将其理解成C++的四个函数。...下面按照ADD_SUBDIRECTORY的顺序进行说明。 2....(VERSION 2.8) # 系统中寻找OpenCV的安装路径 FIND_PACKAGE(OpenCV REQUIRED) # 添加源文件中的#include路径 INCLUDE_DIRECTORIES...平常的软件,CMake的FIND_PACKAGE路径是/usr/share/cmake-2.8/Modules。 ?...但对于OpenCV的FIND_PACKAGE指令,寻找路径是/usr/local/share/OpenCV/OpenCVConfig.cmake。
CMake(Qt、OpenCV、Boost等)减少重复工作 - 告别手动维护不同IDE的项目文件对于任何规模稍大的C/C++项目来说,合适的构建系统不再是可选项,而是必需品!...文件已经包含了三个基本命令:1. cmake_minimum_required - 声明所需的最低CMake版本2. project - 定义项目名称(和可选的版本、描述等)3. add_executable...CMake提供了find_package命令来查找和使用已安装的库。...,这里有一些进阶技巧和最佳实践:使用现代CMake - 避免使用过时的命令(如link_directories)和变量操作,而应使用目标属性(如target_link_libraries)创建包配置文件...(src) add_subdirectory(tests)使用现代CMake - 避免使用过时的命令(如link_directories)和变量操作,而应使用目标属性(如target_link_libraries
ZDPOWER_PATH "D://test") # 设置环境变量#include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/zdpower.cmake) # 包含其他cmake文件# 使用add_subdirectory...添加子工程add_subdirectory(zdstorelib)add_subdirectory(PowerServer)子工程zdstorelib/CMakeList.txtproject(zdstorelib.../cmake/zdpower.cmake)ZD_LIB_PROTOBUF() # 在其他cmake中定义的函数ZD_LIB_STORE() # 同上#多平台spdlogif (WIN32).../include/Store STORE_SRC)# find_package(Qt5 COMPONENTS Core REQUIRED)# 生成可执行程序# add_executable(${PROJECT_NAME
现在简单扩展一下: 比如这里面分享的代码和书籍,案例直接或间接可用。 对教学而言十分方便,对于学生而言使用实践起来也很容易的。...使用: git clone https://gitcode.net/ZhangRelay/ros_book.git 将资源下载到蓝桥ROS的Code文件夹下: 解压缩源代码: 编译第三章案例...: 测试一下啊 当然,如果编译第四章案例会遇到错误,类似问题已经在博客: 这里复现,并重复一下: 将navigation中的对应包放入到指定位置: 再次编译,一切ok。...Call Stack (most recent call first): chapter4_tutorials/robot1_description/CMakeLists.txt:7 (find_package...CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package): Could not
基本结构 Makefile的核心格式为: 目标(target):依赖(dependencies) 命令(command) 目标(target): 通常是生成的文件名(如main.o...支持复杂的项目结构(多目录、多库)。 自动管理依赖关系(如头文件、第三方库)。...project(): 定义项目名称和支持的语言(如 CXX 表示 C++)。..."/path/to/opencv") find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}) 高级功能 (1) 多目录项目 主目录的 CMakeLists.txt...: add_subdirectory(src) # 进入子目录 src add_subdirectory(libs) # 进入子目录 libs 子目录的 CMakeLists.txt
使用样例: add_compile_options(-std=c++11) ---- (12) add_subdirectory 含义:将子目录添加到构建范围 语法: add_subdirectory(...source_dir [binary_dir] [EXCLUDE_FROM_ALL]) 使用样例: add_subdirectory(utils) ---- (13) add_executable 含义...使用样例: configure_file(CMakeLists.txt.in download/CMakeLists.txt) ---- (17) find_package 含义:查找依赖的包名 语法:...使用样例: find_package(OpenSSL REQUIRED) ---- (18) find_library 含义:查找依赖的库 语法: find_library ( name1 [...CMAKE_MODULE_PATH 提供find_package搜索第三方库时使用的路径 ---- 五,开发场景中常见的CMakeList样例 场景一,简单应用 cmake_minimum_required
,如 linux的 Makefile 或 Windows 的 Visual Studio 工程。...8、添加其他的CMakeLists.txt 一个CMakeLists.txt里面的target如果要链接其他CMakeLists.txt中的target,可以使用add_subdirectory...函数,如下所示: add_subdirectory("...../thirdparty/googletest/googletest/" gtest) target_link_libraries(gtest) 9、find_package find_package...find_package可以根据cmake内置的.cmake的脚本去找相应的库的模块,调用了find_package成功之后,会有相应的变量“生成”有效。
1.CMakeLists.txt(4) 这是设置编译过程的主要配置文件。你应该知道,当你开发Dapp时,你需要设置项目名称。版本和语言是可选的。...Boost_USE_MULTITHREADED ON) set(BOOST_ALL_DYN_LINK OFF) # force dynamic linking for all libraries ENDIF(WIN32) FIND_PACKAGE...(externals) include(wasm) add_subdirectory(libraries) add_subdirectory(contracts) 2.CMakeLists.txt...(eosiolib) add_subdirectory(musl) add_subdirectory(libc++) # Your contracts (add the name of the folder...which contains you smart contract) add_subdirectory(Players) 3.CMakeLists.txt(2) 每个智能合约都有自己的配置文件。
/oboe) ② 将 Oboe 源码目录设置为工程的子路径 : add_subdirectory 告诉 CMake 到 OBOE_DIR 路径中查找该路径下的 CMakeLists.txt 构建脚本 ,.../oboe 指定的是编译后的二进制文件存放位置 ; add_subdirectory (${OBOE_DIR} ....将 Oboe 源码目录设置为工程的子路径 , # add_subdirectory 告诉 CMake 到 OBOE_DIR 路径中查找该路径下的 CMakeLists.txt 构建脚本 , # 编译该构建脚本中指定的源码.../oboe 指定的是编译后的二进制文件存放位置 ; add_subdirectory (${OBOE_DIR} ./oboe) # 4....链接函数库 , native-lib 是本应用中编译的动态库 , 这里链接 log 日志库 , oboe 高性能音频库 # 该 oboe 函数库就是上面 add_subdirectory 操作编译的
要在根目录使用他,可以用 CMake 的 add_subdirectory 添加子目录,子目录也包含一个CMakeLists.txt,其中定义的库在 add_subdirectory 之后就可以在外面使用...Neargye/magic_enum - 枚举类型的反射,如枚举转字符串等(实现方式很巧妙) g-truc/glm - 模仿 GLSL 语法的数学矢量/矩阵库(附带一些常用函数,随机数生成等) Tencent...命令寻找系统中的包/库: find_package(fmt REQUIRED) target_link_libraries(myexec PUBLIC fmt::fmt) 为什么是 fmt::fmt 而不是简单的...,而包管理器的作者为 find_package 编写的脚本(例如 /usr/lib/cmake/TBB/TBBConfig.cmake)能够自动查找所有依赖,并利用刚刚提到的 PUBLIC PRIVATE...(如 apt)安装 C++ 包。
https://blog.csdn.net/10km/article/details/82931978 我们知道简单的使用命令find_package可以查找指定的package....对于经常会用到的 jpeg库turbojpeg,可以用find_package(JPEG REQUIRED)来查找。...(STATUS "JPEG_LIBRARIES=${JPEG_LIBRARIES}") endif() 但我们知道cmake默认查找到的是动态库,所以如果想查找libjpeg的静态库,这样是不行的。...其实FindJPEG.cmake脚本在设计时已经考虑到了这个问题,如下是FindJPEG.cmake脚本的代码片段,可以看到调用者可以通过JPEG_NAMES这个变量指定优先查找到的库名字。...所以如果想要指定优先使用静态库,前面的cmake脚本可以稍改一下,如下,就是在调用find_package之前设置JPEG_NAMES为想要的静态库名: # 查找libjpeg库,优先使用静态库 if(
本文对CMake中库的打包,安装,导出以及支持find_package,使其能够很简单的应用到其他的项目中进行详细的总结。...MY_LIBRARY_DEBUG_MODE "whether or not debug mode is activated" OFF)# add subdiretoriesadd_subdirectory(src)add_subdirectory...(example)add_subdirectory(tool)add_subdirectory(test)这个文件中有一些option操作,这些配置选项能够讲相关配置写入到config.hpp.in中,...REQUIRED并非必须,但是在引用目标的时候就必须附加相应的变量。版本控制find_package()同样支持版本控制,你可以传入版本号作为第二个参数。...现在调用find_package(my_library 1.0 REQUIRED)这种形式,可以寻找1.0或者相兼容版本(如果你设置了兼容的版本号)的库。
只包含一个命令: add_subdirectory(message) 跳转到message文件夹,我们再次看到管理我们对message库依赖的常用命令: 首先,我们调用find_package来找到一个合适的库版本...这可以通过这个选项来指定,它可以接受 Git 识别为“版本”信息的任何标识符,如 Git 提交 SHA、Git 标签,或者仅仅是一个分支名称。...准备工作 如第七章,项目结构化所示,我们将把项目结构化为树状。每个子目录都有一个CMakeLists.txt文件,其中包含与该目录相关的指令。...对于我们当前的目的,名称重整并不是真正的问题。Fortran 2003 标准为函数和子程序定义了一个bind属性,它接受一个可选的name参数。...Python 解释器: find_package(PythonInterp REQUIRED) 然后,我们包含账户子目录: add_subdirectory(account) 之后,我们定义单元测试:
FindOpencv.cmake内容很简单: find_package(OpenCV REQUIRED) message(in FindOpencv.cmake inc: ${OpenCV_INCLUDE_DIRS...# dependence lib set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) find_package(GLog REQUIRED) find_package...(Opencv REQUIRED) 在主CMakeLists.txt中主要include对应的cmake目录然后find_package既可获取对应的lib的相关路径。...(GLog REQUIRED) find_package(ProtoBuf REQUIRED) find_package(OpenBLAS REQUIRED) find_package(Opencv REQUIRED...) add_subdirectory(src) include_directories(${CMAKE_SOURCE_DIR}/src) set(SOURCE_FILES main.cpp test_blob.h