什么是#cmakedefine预处理程序指令?

sdg*_*sdh 3 cmake c-preprocessor

我正在查看ZeroMQ的源代码,我想从源代码构建它.在里面我找到了platform.hpp.in,里面包含:

...
#cmakedefine ZMQ_HAVE_SO_PEERCRED
#cmakedefine ZMQ_HAVE_LOCAL_PEERCRED

#cmakedefine ZMQ_HAVE_SOCK_CLOEXEC
#cmakedefine ZMQ_HAVE_SO_KEEPALIVE
#cmakedefine ZMQ_HAVE_TCP_KEEPCNT
...
Run Code Online (Sandbox Code Playgroud)

我假设这些cmakedefine宏用作生成头文件的模板,但它们在CMake中究竟是如何工作的?如何确定哪些是有效值?在构建项目时,用户如何设置值?

usr*_*567 8

它是由...处理的文件的一部分configure_file.当configure_file为您的文件调用时,#cmakedefine FOO替换为#define <valueFoo>和<valueFoo>是CMake变量的值FOO.这用于通过定义的C预处理器宏将Vale从Vake传递到C或C++.

文档:https://cmake.org/cmake/help/latest/command/configure_file.html