为工程添加版本号
- 优点
虽然我们可以在源代码中唯一指定这个版本号,但是,把指定版本号这个动作放在CMakeLists文件中来做,是可以提供更好的灵活性的。 - CMakeLists
123456cmake_minimum_required (VERSION 2.6)project (Uitplugin)# 版本号set (Uitplugin_VERSION_MAJOR 1)set (Uitplugin_VERSION_MINOR 0)add_executable (Uitplugin uitplugin.cxx)
配置头文件
- 目的
通过这个头文件向源代码传递一些CMake的设置 - CMakeLists
12345678910cmake_minimum_required (VERSION 2.6)project (Uitplugin)# 版本号set (Uitplugin_VERSION_MAJOR 1)set (Uitplugin_VERSION_MINOR 0)# 配置头文件configure_file ("${PROJECT_SOURCE_DIR}/UitpluginConfig.h.in""${PROJECT_BINARY_DIR}/UitpluginConfig.h")# 添加可执行的文件add_executable (Uitplugin uitplugin.cxx)
将二进制文件树添加到包含文件的搜索路径
- 目的
为了找得到相应的头文件 - CMakeLists
123456789101112cmake_minimum_required (VERSION 2.6)project (Uitplugin)# 版本号set (Uitplugin_VERSION_MAJOR 1)set (Uitplugin_VERSION_MINOR 0)# 配置头文件configure_file ("${PROJECT_SOURCE_DIR}/UitpluginConfig.h.in""${PROJECT_BINARY_DIR}/UitpluginConfig.h")# 将二进制文件树添加到包含文件的搜索路径include_direction ("${PROJECT_BINARY_DIR}")# 添加可执行的文件add_executable(Uitplugin uitplugin.cxx) - 原因
经过配置的文件,会被写到下面二进制文件目录下
1${PROJECT_BINARY_DIR}而通过下面这句代码,就可以做到一件事情
1include_direction ("${PROJECT_BINARY_DIR}")哪件事情?
将下面这些代码在源目录${PROJECT_SOURCE_DIR}
下创建一份UitpluginConfig.h.in文件123// 与Uitplugin相关的配置好的选项以及设置:#define Uitplugin_VERSION_MAJOR @Uitplugin_VERSION_MAJOR@#define Uitplugin_VERSION_MINOR @Uitplugin_VERSION_MINOR@注意
当CMake配置这份头文件时,@Uitplugin_VERSION_MAJOR@
和@Uitplugin_VERSION_MINOR@
会被从CMakeLists传过来的值替代
引入库
- 假如 Uitplugin.cpp 如下
通过修改Uitplugin.cpp 来包含configured头文件然后使用其中的版本号
1234567891011121314151617181920#include <iostream>#include <cstdlib>#incldue <cstdio>#include "Uitplugin.h"using namespace std;int main(int argc,char * argv[]){if(argc < 2){fprintf(stdout,"%s Version %d.%d\n",argv[0],Uitplugin_VERSION_MAJOR,Uitplugin_VERSION_MINOR);fprintf(stdout,"Usage:%s number\n",argv[0]);return 1;}double inputValue = atof(argv[1]);double outputValue = matth(inputValue);fprintf(stdout," %g---%g\n",inputValue,outputValue);return 0;} - 如果需要使用库文件
把库文件放到一个目录下,比如Math
然后在这个Math文件夹中,包含CMakeLists文件,代码如下:
1add_library (Math uitmath.cxx)然后,顶层CMakeLists文件的后面,需要加上下面代码:
1234include_directories ("${PROJECT_SOURCE_DIR}/Math")add_subdirectory (Math)# 引入可执行文件target_link_libraries (Uitplugin Math) - 让上面用到的那个库变成可以选择
- 首先,为顶层CMakeLists添加一个选项
1option (USE_MYMATH "Use Wangxu18 provided math" ON
- 效果是这会导致CMake的GUI中显示一个默认的ON值,并且,用户是可以随需求改变这个设置
- 这个设置,会被储存在cache中,用户不用cmake该工程时,每次都设置这个选项
- 第二点,让之前那个Math库的链接变得可选
修改顶层CMakeLists文件结尾如下:
123456789# 是否添加Math库if (USE_MYMATH)include_directoies ("${PROJECT_SOURCE_DIR}/Math")add_subdirectoy (Math)set (EXTRA_LIBS ${EXTRA_LIBS} Math)endif (USE_MYMATH)# 添加可执行文件add_executable (Uitplugin uitplugin.cxx)target_link_libraries (Uitplugin ${EXTRA_LIBS}) - Uitplugin.cpp 源代码中,则也应相应改变为条件编译
123456789101112131415161718192021222324#include <iostream>#include <cstdlib>#incldue <cstdio>#include "Uitplugin.h"using namespace std;int main(int argc,char * argv[]){if(argc < 2){fprintf(stdout,"%s Version %d.%d\n",argv[0],Uitplugin_VERSION_MAJOR,Uitplugin_VERSION_MINOR);fprintf(stdout,"Usage:%s number\n",argv[0]);return 1;}double inputValue = atof(argv[1]);#ifdef USE_MYMATHdouble outputValue = mymatth(inputValue);#elsedouble outputValue = matth(inputValue);#endiffprintf(stdout," %g---%g\n",inputValue,outputValue);return 0;}
- 首先,为顶层CMakeLists添加一个选项
安装 与测试
- 在顶层CMakeLists文件添加
123# 添加安装目标install (TARGETS Uitplugin DESTINATION bin)install (FILES "${PROJECT_BINARY_DIR}/UitpluginConfig.h" DESTINATION include)
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Cmake应用记述二05/12
- ♥ Why CMake?10/02
- ♥ Cmake 构建命令10/02
- ♥ CMake教程二07/07
- ♥ CLion:配置C++下Nasm开发环境(debian)08/06
- ♥ CMake生成器10/02