CMake configure_file没有源代码构建

Posted

tags:

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

我正在尝试使用CMake创建一些将由我的源代码读入的头文件。我的问题是,当我在cmake ..文件夹中运行build/时,它会在我的build文件夹中生成配置文件,然后当我运行生成的Makefile时,它无法找到标题。

当然我可以通过使用我的C ++文件中的#include "build/config.h"而不是#include "config.h"来解决这个问题,但似乎我的C ++代码不应该知道我的构建文件夹(例如,我可能想要多个可能的构建设置)。同样,我可以让CMake将头文件写入源目录,但这会破坏源外构建设置。

有没有办法让CMake生成一个将构建的Makefile,受这些约束?

我的CMakeLists.txt如下。它读入config.h.in并输出config.h

cmake_minimum_required(VERSION 3.9)
project(fftb)

set(CMAKE_CXX_STANDARD 17)

set(fftb_VERSION_MAJOR 0)
set(fftb_VERSION_MINOR 0)

configure_file(
    "${PROJECT_SOURCE_DIR}/config.h.in"
    "${PROJECT_BINARY_DIR}/config.h"
)

add_executable(fftb main.cpp config.h.in)

我的config.h.in在下面,它#defines在main.cpp中使用的版本

#ifndef FFTB_CONFIG_H_IN_H
#define FFTB_CONFIG_H_IN_H

#define fftb_VERSION_MAJOR @fftb_VERSION_MAJOR@
#define fftb_VERSION_MINOR @fftb_VERSION_MINOR@

#endif //FFTB_CONFIG_H_IN_H

我的main.cpp在下面,它包括自动生成的config.h并输出它。

#include <iostream>
#include "config.h"

int main() {
    std::cout << "Version " << fftb_VERSION_MAJOR << "." << fftb_VERSION_MINOR << std::endl;
    return 0;
}
答案

您可以将构建目录添加到目录列表中,以通过向CMakeLists.txt添加include_directories(${PROJECT_BINARY_DIR})之类的内容来搜索包含文件。

以上是关于CMake configure_file没有源代码构建的主要内容,如果未能解决你的问题,请参考以下文章

cmake学习之-configure_file

cmake configure_file 评价

CMake configure_file 未包含在静态库中

cmake基础教程(42)configure_file动态生成头文件

cmake基础教程(42)configure_file动态生成头文件

CMake基本工程