CMake configure_file没有源代码构建

时间:2018-03-02 20:12:32

标签: c++ cmake

我尝试使用CMake创建一些将由我的源代码读入的头文件。我的问题是,当我在* Trying *.*.*.*... * TCP_NODELAY set * Connected to *.*.*.* port 80 (#0) > GET /internal/ping HTTP/1.1 > Host: * > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 502 Bad Gateway < Content-Type: text/html; charset=UTF-8 < Referrer-Policy: no-referrer < Content-Length: 332 < Date: Sun, 04 Mar 2018 05:19:59 GMT < <html><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>502 Server Error</title> </head> <body text=#000000 bgcolor=#ffffff> <h1>Error: Server Error</h1> <h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2> <h2></h2> </body></html> * Curl_http_done: called premature == 0 * Connection #0 to host trial.qurasense.com left intact 文件夹中运行cmake ..时,它会在我的构建文件夹中生成配置文件,然后当我运行生成的Makefile时,它无法找到标题。

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

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

我的CMakeLists.txt如下。它读入#include "config.h"并输出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) 位于下方,#defines要在main.cpp中使用的版本

config.h.in

我的#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

1 个答案:

答案 0 :(得分:1)

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