【发布时间】:2021-12-19 15:06:22
【问题描述】:
概述
我的 CMake 项目中的一些头文件是在构建过程中自动生成的。我的目标是设置CMakeLists.txt,以便为我的项目构建文档也会触发头文件生成(不触发任何其他构建)。基本的 CMake/Doxygen 设置遵循此 MS tutorial 的初始步骤。
详情
这个项目的目录结构有些不合常规:
${CMAKE_SOURCE_DIR} 是 cmake/ 持有顶级 CMakeLists.txt 文件,${CMAKE_BINARY_DIR} 是 cmake/cmake-build-debug。
我希望生成的文档以cmake/cmake-build-debug/docs 结尾。但是,我想将 CMake 和 Doxygen 配置提交到存储库,因此这些文件位于 docs/ 中。
源文件如下:
-
squawk.cpp:#include "squawk.hpp" void squawk(const std::string &s) { std::cout<<STRFY(SQUAWK)<<": "<<s<<std::endl; } -
squawk.hpp:#include <iostream> #include <string> #define STRINGIFY(X) #X #define STRFY(X) STRINGIFY(X) #include "squawk.hd" void squawk(const std::string &s); -
main.cpp:#include "squawk.hpp" int main(int argc, char* argv[]) { const std::string s = "Hello World!"; squawk(s); return 0; } -
squawk.def:#define SQUAWK squeal
在构建过程中我取squawk.def,将squeal改成caw并保存为squawk.hd,由sed执行,指令在squawk.ss:s/(#define SQUAWK)(.*)/\1 caw/。这是头文件的生成过程。即使我只是构建文档而无需构建 squawk 二进制文件,我也希望发生这种情况。
【问题讨论】: