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基础教程(42)configure_file动态生成头文件