我尝试使用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
答案 0 :(得分:1)
您可以将您的构建目录添加到目录列表中,以便通过向您的CMakeLists.txt添加include_directories(${PROJECT_BINARY_DIR})
等内容来搜索包含文件