我正在尝试使用 CMake 创建一些将由我的源代码读入的头文件。我的问题是,当我在 build/
文件夹中运行 cmake ..
时,它会在我的构建文件夹中生成配置文件,然后当我运行生成的 Makefile 时它会失败找到标题。
当然,我可以通过使用 C++ 文件中的 #include "build/config.h"
而不是 #include "config.h"
来解决此问题,但它似乎我的 C++ 代码不应该知道我的构建文件夹(例如,我可能需要多个可能的build设置)。同样,我可以要求 CMake 将头文件写入源目录,但这会破坏源外build设置。
有没有办法让 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;
}
最佳答案
您可以将构建目录添加到目录列表中以搜索包含文件,方法是将 include_directories(${PROJECT_BINARY_DIR})
添加到 CMakeLists.txt
关于c++ - 使用源代码构建的 CMake configure_file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49076630/