CMake configure_file没有源代码构建

问题描述 投票:0回答:1

我正在尝试使用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;
}
c++ cmake
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.