cmake--代码生成

Posted svenzhang9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake--代码生成相关的知识,希望对你有一定的参考价值。

前言

cmake能够支持生成代码, 常用于生成版本信息以及文件路径等。

一, 目录结构

├── CMakeLists.txt
├── main.cpp
├── path.h.in
├── ver.h.in

* link:CMakeLists.txt[] - Contains the CMake commands you wish to run
* link:main.cpp[] - The source file with main

--------------------------------------

#include <iostream>
#include "ver.h"
#include "path.h"

int main(int argc, char *argv[])
{
std::cout << "Hello Version " << ver << "!" << std::endl;
std::cout << "Path is " << path << std::endl;
return 0;
}

------------------------------------------------
* link:path.h.in[] - File to contain a path to the build directory

------------------------------------------------

#ifndef __PATH_H__
#define __PATH_H__

// version variable that will be substituted by cmake
// This shows an example using the @ variable type
const char* path = "@[email protected]";

#endif

------------------------------------------------
* link:ver.h.in[] - File to contain the version of the project

------------------------------------------------

#ifndef __VER_H__
#define __VER_H__

// version variable that will be substituted by cmake
// This shows an example using the $ variable type
const char* ver = "${cf_example_VERSION}";

#endif

------------------------------------------------

二,cmake脚本

cmake_minimum_required(VERSION 3.5)

project (cf_example)

set (cf_example_VERSION_MAJOR 0)
set (cf_example_VERSION_MINOR 2)
set (cf_example_VERSION_PATCH 1)
set (cf_example_VERSION "${cf_example_VERSION_MAJOR}.${cf_example_VERSION_MINOR}.${cf_example_VERSION_PATCH}")

# 将ver.h.in文件替换为ver.h文件移动到编译目录中,并将ver.h.in的cmake变量替换为字符串
configure_file(ver.h.in ${PROJECT_BINARY_DIR}/ver.h)

# 将path.h.in文件替换为path.h文件移动到编译目录,并将path.h的cmake变量替换为路径字符串
configure_file(path.h.in ${PROJECT_BINARY_DIR}/path.h @ONLY)

add_executable(cf_example
main.cpp
)

# 将生成的头文件添加到包含的目录,CMAKE_BINARY_DIR为编译目录。
target_include_directories( cf_example
PUBLIC
${CMAKE_BINARY_DIR}
)

三,扩展分析

可以使用"${cf_example_VERSION}"和"@[email protected]"两种方式设置配置文件的cmake变量。

以上是关于cmake--代码生成的主要内容,如果未能解决你的问题,请参考以下文章

为啥 CMake 在没有 CMAKE_CXX_FLAGS 的情况下生成 Makefile?

初见 cmake

CMake:使用自定义工具输出生成标头

如何使用CMAKE生成makefile文件

macOS使用CMake生成Xcode工程

AndroidStudio用Cmake方式编译NDK代码(cmake配置.a库)