最近看了下最新版本的cmake的文档,很惊喜地发现他已经支持直接设置Android和OSX的一些变量了,然后有瞄了一眼NDK,发现里面现在也停工官方的cmake支持。...编译iOS工程 iOS 只要设置CMAKE_OSX_SYSROOT,CMAKE_SYSROOT和CMAKE_OSX_ARCHITECTURES就可以了,其他都是自动的。...只要cmake的时候把cmake的工具链检测文件改成这个就行了。...不过使用Android这个文件指定工具链的时候有一个问题,android.toolchain.cmake指定了只从sysroot来获取include目录和库目录,也就是说很多module里可以指定库的搜索目录在...具体来说就是*find_library*和*find_path*之类的函数。所以有一些依赖库检测的脚本需要在这种情况下跳过检查,直接用。
从错误信息可以看出找不到Boost库的头文件所在路径,于是我查看了一下muduo源代码根目录下的CMakeLists.txt文件: cmake_minimum_required(VERSION 2.6)...- 首选的Boost安装路径 BOOST_INCLUDEDIR - 首选的头文件搜索路径 e.g..../include BOOST_LIBRARYDIR - 首选的库文件搜索路径 e.g....如果开启了,则不会搜索用户指定路径之外的路径 所以可以首先设置BOOST_ROOT、BOOST_INCLUDEDIR、BOOST_LIBRARYDIR这几个变量的值,改成自己的Boost库的目录,比如我的..../ 上面4种方法中,我所熟悉的是第三种和第四种,这里我以cmake第三种为例: 注意:不论使用make还是cmake也好,注意:muduo库的路径需要根据自己编译后的路径为准。
寻找glog,gflag的代码有bug(目前还没修改),导致即使如上一步通过GLOG_ROOT_DIR,GFLAGS_ROOT_DIR指定了glog,gflag路径,cmake也不会找到该路径下的glog...,gflag,如果你的/usr下安装了glog,gflag,它依然会找到系统路径下的版本。...cmake的find_library的查找机制没有全搞明白 简单说就是调用find_library时,会以从一组路径中顺序查找指定的库,这有一个优先序问题,如果没有指定了NO_DEFAULT_PATH...,则会先查找默认的系统库路径 如果指定了NO_DEFAULT_PATH,则只查找PATHS提供的路径,不会查找系统库路径。...因为所以原始代码中没有加NO_DEFAULT_PATH导致每次只能找到系统路径下的库。 如何保证PATHS指定的路径优先被搜索呢?
Cmake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用 “CMake...,如编译参数,产生的目标名等。...-DANDROID_ABI NDK 支持的 ABIs, 如 armeabi,armeabi-v7a,armeabi-v7a with NEON,arm64-v8a等。...-DANDROID_NDK NDK安装路径 -DCMAKE_LIBRARY_OUTPUT_DIRECTORY 输出库的位置 -DCMAKE_BUILD_TYPE CMake 用于交叉编译 Andriod配置文件的路径。
System") elseif(UNIX) message(STATUS "in Unix System") endif() ---- (7) include_directories 含义:将指定目录添加到编译器的头文件搜索范围.../src/com/include) ---- (8) link_directories 含义:添加需要链接的共享库(动态链接库)文件路径,相当于g++命令的-L参数,也相当于Linux环境变量设置LD_LIBRARY_PATH...使用样例: find_library(LOG_LIB log) ---- (19) find_path 含义:搜索包含指定文件名的路径 语法: find_path ( name1 [path1...cmake 当前正在处理的源目录的完整路径 ---- --EXECUTABLE_OUTPUT_PATH 生成的可执行文件路径 ---- --LIBRARY_OUTPUT_PATH 生成的库路径 ---...---- --CMAKE_CURRENT_LIST_LINE 当前正在处理的文件的行号 ---- --CMAKE_MODULE_PATH 提供find_package搜索第三方库时使用的路径 ----
编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项 EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径 LIBRARY_OUTPUT_PATH:库文件路径...指定项目名称,生成的VC项目的名称; >>使用${HELLO_SOURCE_DIR}表示项目根目录 include_directories:指定头文件的搜索路径,相当于指定gcc的-I参数 >>...编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项 EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径 LIBRARY_OUTPUT_PATH:库文件路径...命令 FIND_PATH 指明头文件查找的路径,原型如下: find_path( name1 [path1 path2 ...])...命令 FIND_PATH 指明头文件查找的路径,原型如下: find_path( name1 [path1 path2 ...])
搜索指定,如:-DCMAKE_CXX_COMPILER=clang++。...__CFLAGS_CXX_CLANG}> # Clang编译器生效 $:${__CFLAGS_CXX_CLANG}>)# 添加头文件搜索路径...工具链通常用于指定系统名称、目标处理器类型、编译器、库搜索路径以及编译参数等信息,使用时在 cmake 配置阶段使用变量 CMAKE_TOOLCHAIN_FILE 指定,如:cmake .....(CMAKE_SYSTEM_PROCESSOR arm)# 指定系统库路径,相当于向编译器指定 --sysrootset(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs...)# 除了指定CMAKE_SYSROOT,还可以通过设置CMAKE_FIND_ROOT_PATH指定搜索路径# 指定编译器set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf
获取环境变量 设置编译器 设置依赖库路径 包含头文件路径 添加编译器编译选项 添加打印 CMakeLists路径嵌套 控制编译流程 Shell脚本传递宏至CMakeList CMakeLists传递变量至代码工程...编译警告 CMake编译警告和报错设置 常用警告 配置交叉编译环境常需要的修改 设置默认库和头文件搜索路径 设置交叉编译工具链 设置浮点运算处理方式 常见场景 编译动态库 编译静态库 编译可执行文件...当存在被设置但是未被使用的参数发出警告,需配合-Wall -Wsign-compare 当比较有符号和无符号值时发出警告 配置交叉编译环境常需要的修改 设置默认库和头文件搜索路径 编译默认会从/usr...当设置了CMAKE_SYSROOT后,则会从xxx/usr/include搜索头文件、从xxx/usr/lib中搜索依赖库。...## 系统库路径:${SDKTARGETSYSROOT}/usr/lib ## 系统头文件:${SDKTARGETSYSROOT}/usr/include set(CMAKE_SYSROOT "${SDKTARGETSYSROOT
打开并找到 178-183 行: find_path(CLBLAST_INC NAMES cblast.h PATHS ${CLBLAST_INCLUDE_SEARCH_PATHS}) find_library...然后没有添加CLBLAST_INC到总的包含路径里面。并且 clBlast 一来 OpenCL,也没有添加 OpenCL 的静态库,会导致找不到各种clxxxx函数。...改成: find_path(CLBLAST_INC NAMES clblast.h PATHS ${CLBLAST_INCLUDE_SEARCH_PATHS}) find_library(CLBLAST_LIB...】,说明 CMake 并没有找到 VCPKG 安装的库文件。...>和换成 VCPKG 的存储路径,我的开发环境中大概是c:/vcpkg/installed/x64-windows/lib和c:/vcpkg/installed/x64-
任何一个软件项目,除了写代码之外,还有一个更为重要的任务,就是如何组织和管理这些代码,使项目代码层次结构清晰易读,这对以后的维护工作大有裨益。...5.可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。 三、安装cmake 几乎所有主流的Linux发行版的源中都包含有cmake的安装包,直接从源中添加即可。...命令 MESSAGE 会将参数的内容输出到终端。 命令 FIND_PATH 指明头文件查找的路径,原型如下: find_path( name1 [path1 path2 ...])...该命令在参数 path* 指示的目录中查找文件 name1 并将查找到的路径保存在变量 VAR中。...这些特性在 gcc/g++ 中是通过编译时的参数来决定的,如果将优化程度调到最高需要设置参数-O3,最低是 -O0 即不做优化;添加调试信息的参数是 -g -ggdb ,如果不添加这个参数,调试信息就不会被包含在生成的二进制文件中
workflow的cmake find_package(openssl require) 改为 set(OPENSSL_INCLUDE_DIR e:/opensource/openssl/include.../third_party/snappy) 去掉snappy中的googletest和benchmark set(OPENSSL_INCLUDE_DIR e:/opensource/openssl/include...) find_path(OPENSSL_LINK_DIR libssl e:/opensource/openssl) set(Protobuf_INCLUDE_DIR E:/Opensource/protobufsource.../src) find_file(WORKFLOW_INCLUDE_DIR include …/workflow/src) find_package找不到*-config.cmake或者*config.cmake...可以改成find_file、find_library、find_path等函数,已经有值时,find_package不会重复搜索,可以使用下面语句清除变量 unset(name, CACHE) find_package
将给定的目录添加到编译器用于搜索包含文件(如头文件)的目录中,相对路径被解释为相对于当前源目录。...区别于TARGET_INCLUDE_DIRECTORIES,这个命令的作用只是作用于指定的目标,为指定的目标添加搜索路径。...在 find_path 和 find_library以及 find_package 时,会搜索一些默认的路径。...当我们将一些lib安装在非默认搜索路径时,cmake就没法搜索到了,可设置: SET(CMAKE_INCLUDE_PATH "include_path") // find_path,查找头文件 SET(...除此之外,C/C++ 程序员长期以来手动管理依赖,即手动查找、安装依赖,再配置构建工具(如 cmake)使用依赖。
CMake并不直接建构出最终的软件,而是产生标准的建构档(如 Unix的 Makefile或 Windows Visual C++的 projects/workspaces),然后再依一般的构建方式使用...使用一对双引号包裹的被认为是一个参数。我们的命令可以是一个内置命令(如project),也可以是一个用户定义的宏(macro)或者函数(function)。...include 文件 使用范例:include_directories(${PROJECT_SOURCE_DIR}/lib) find_path命令 命令语法:find_path(name1...(目录)路径列表并保存在 variable中 #文件路径列表中的每个文件的文件名都能匹配 globbing expressions(非正则表达式,但是类似) #如果指定了 RELATIVE路径,那么返回的文件路径列表中的路径为相对于...(语法为 CMake ,这里使用 CMake .. 表明了 CMakeLists.txt在 Build目录的父目录中)。
最近在编译skija(JetBrains对skia的Java封装),编译报错: .....找了下报错的脚本"native/CMakeLists.txt", 发现里面没有找JNI module,于是添加 # JNI find_package(JNI) set(JAVA_INCLUDE_PATH..."$ENV{JAVA_HOME}/include") 第一步find_package查找失败,只能使用set设置手动添加。...查看"Modules/FindJNI.cmake",可见其也是根据哪个文件夹包含"jni.h"这样查找的。...也就是说查找name1所在的目录,存到中返回;如果找不到,就存到-NOTFOUND 参考: https://github.com/JetBrains/skija https://cmake.org
默认的搜索路径为 cmake 包含的系统库,因此如果是 NDK 的公共库只需要指定库的 name 即可。.../common.cmake) # 指定包含文件的全路径 include(def) # 在搜索路径中搜索def.cmake文件 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR...}/cmake) # 设置include的搜索路径 三、常用变量 1....:返回通过 project 命令定义的项目名称 CMAKE_CURRENT_SOURCE_DIR:当前处理的 CMakeLists.txt 所在的路径 CMAKE_CURRENT_BINARY_DIR:...如果 set(BUILD_SHARED_LIBS ON) 后,默认生成的为动态库 CMAKE_C_FLAGS:设置 C 编译选项,也可以通过指令 add_definitions() 添加 CMAKE_CXX_FLAGS
) find_path(var name pathlist) find_program(var name pathlist) 子目录 add_subdirectory(list) 可执行文件...libname shared ${source} ) 静态库 add_library(libname static ${source} ) 头文件 include_directories(list) 源码搜索...执行外部命令 exec_program(commd ) 子模块 include() 信息输出 messge(STATUS “messge”) 项目 project(name) 例如:添加三方库...include_directiories(/usr/include/curl) target_link_libraries(myprogram path/curl.so) 使用find_package的方式...(curltest ${CURL_LIBRARY}) 构建过程中生成,模块.dir和每个模块的编译文件 关联多个cmake项目使用add_subdirectory, 子项目去掉add_subdirectory
cpp_redis是个C++11的开源的redis client库,支持cmake构建,但并没有提供CONFIG模式的import target导入脚本,如果希望在cmake下以find_package...方式导入cpp_redis的库,就需要自己写一个MODULE模式脚本,以下为FindCppRedis.cmake脚本实现 FindCppRedis.cmake # FindCppRedis # ----...执行时可接收以下输入变量 CPPREDIS_MT_DIR, [可选],指定MSVC以/MT选项编译的库的安装位置 CPPREDIS_MD_DIR, [可选],指定MSVC以/M选项编译的库的安装位置...defined, 则忽略此参数 FindCppRedis.cmake 执行后输出的变量 CPPREDIS_FOUND, 找到 cpp_redis 库为true,否则为false CPPREDIS_INCLUDE_DIR...所在的文件夹添加到CMAKE_MODULE_PATH # 否则find_package(CppRedis)时找不到FindCppRedis.cmake list (APPEND CMAKE_MODULE_PATH
默认的搜索路径为 cmake 包含的系统库,因此如果是 NDK 的公共库只需要指定库的 name 即可。.../common.cmake) # 指定包含文件的全路径 include(def) # 在搜索路径中搜索def.cmake文件 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR...}/cmake) # 设置include的搜索路径 三、常用变量 1....编译目录CMAKE_CURRENT_LIST_DIR:CMakeLists.txt 的完整路径CMAKE_CURRENT_LIST_LINE:当前所在的行CMAKE_MODULE_PATH:定义自己的...如果 set(BUILD_SHARED_LIBS ON) 后,默认生成的为动态库 CMAKE_C_FLAGS:设置 C 编译选项,也可以通过指令 add_definitions() 添加 CMAKE_CXX_FLAGS
# 导入路径 IMPORTED_LOCATION # ${CMAKE_SOURCE_DIR} 是本 CMakeList.txt 构建脚本的路径 ,...是 CMake 工具内置的变量 # Android CMake 也内置了一些变量 , 如 ANDROID_ABI ${CMAKE_SOURCE_DIR}/.....: ${CMAKE_SOURCE_DIR}, ANDROID_ABI : ${ANDROID_ABI}") # 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib # 这个路径是...# CMAKE_SOURCE_DIR 指的是当前的文件地址 # -L 参数指定动态库的查找路径 #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR...CMake 构建脚本 CMakeLists.txt 中使用到的所有 CMake 命令都来自上述脚本命令和工程命令 , 如 add_library , find_library , target_link_libraries
然而链接时报错了,无数的错误都是找不到glog的符号(undefined reference)… 我的项目是cmake生成的工程文件,glog也是我自己用cmake编译出来的,为了查找原因我查看了glog...提供的cmake脚本。...是glog 的安装路径 find_path(GLOG_INCLUDE_DIR glog/logging.h PATHS ${GLOG_ROOT_DIR}/include) find_library(GLOG_LIBRARY...中,加入glog静态库的正确方式是这样的: # GLOG_ROOT_DIR 是glog 的安装路径 find_package(glog REQUIRED CONFIG HINTS ${GLOG_ROOT_DIR...可以看到CXX_DEFINES 中已经自动添加了上面的4个宏定义,并且将glog include文件夹也自动加到了CXX_INCLUDES # CMAKE generated file: DO NOT
领取专属 10元无门槛券
手把手带您无忧上云