模块使用和自定义模块
cmake开发者在开发过程中认为纯粹依靠cmake本身提供的基本指令来管理工程是也一件非常复杂的事情,所以cmake设计成了可扩展的架构,可以通过编写一些通用的模块来扩展cmake, 系统中提供了其他各种模块,一般情况需要使用INCLUDE指令显式的调用,FIND_PACKAGE指令是一个特例,可以直接调用预定义的模块。
在本篇,将先介绍cmake提供的FindCURL模块的使用。然后,基于我们上节的libutilsbox共享库,编写一个FindUTILSBOX.cmake 模块。
注意:FIND_PACKAGE调用预定义在 CMAKE_MODULE_PATH 下的 Find.cmake 模块,如果我们要调用UtilsBox模块,则要写成FindUTILSBOX.cmake,文件名是大小写敏感的,注意UtilsBox模块名称要全部大写。否则会提示找不到,你可以尝试把FindUTILSBOX.cmake中的UTILSBOX改为小写,然后重新cmake … 看看会提示什么。
本篇源码在cmake-curl-utilsbox项目中,通过目录树可以明显看出多了cmake目录以及FindUTILSBOX.cmake
cmake-curl-utilsbox项目中同时使用系统提供的系统预定义的FindCURL模块以及自定义的FindUTILSBOX模块,
需要依赖上节安装的utilsbox库。
目录树:
.
├── cmake
│ └── FindUTILSBOX.cmake
├── CMakeLists.txt
├── doc
│ └── Introduction.txt
├── README.md
└── src
├── CMakeLists.txt
└── main.cpp
CMakeLists.txt
# 声明编译要求cmake最低版本
cmake_minimum_required(VERSION 3.0)
# 声明一个cmake工程
project(CURLTEST)
# 添加子目录, 并指定指定中间二进制和目标二进制存放的位置
ADD_SUBDIRECTORY(src bin)
src/main.cpp
#include <iostream>
#include <curl/curl.h>
#include <utilsbox.h>
using namespace std;
FILE *fp;
int write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
int written = fwrite(ptr, size, nmemb, (FILE *)fp);
return written;
}
int main(int argc, char** argv)
{
const char * path = "/tmp/curl-test";
const char *