我已经开始深入挖掘,以便我能更好地理解CMake的内部工作原理。我一直在浏览Modules目录中的文件,以了解运行CMake时如何/为何/何时发生事情。
到目前为止,我无法确定CMAKE_HOST_APPLE
/ CMAKE_HOST_UNIX
/ CMAKE_HOST_WIN32
变量的设置方式/位置。
任何人都可以启发我吗?
在相关的说明中,由于我不知道它们被启动/处理的顺序,我一直在以偶然的方式浏览模块文件。
是否有描述此流程的任何地方或者至少表明一个起点,以便我可以从那里找出其余部分?
答案 0 :(得分:1)
这些变量在CMake的代码中设置,由平台相关的#ifdef
检查包围,因此您可以说它们是在CMake本身的编译期间设置的。
我在查找有问题的源文件时遇到了一些困难,因为添加这些默认变量定义的代码最近才从cmMakefile::AddDefaultDefinitions()
移到cmState::Snapshot::SetDefaultDefinitions()
(请参阅此commit)。
以下是cmState.cxx
的示例:
#if defined(__APPLE__) this->SetDefinition("APPLE", "1"); this->SetDefinition("CMAKE_HOST_APPLE", "1"); #endif
有关CMake如何运作的更多信息,请参阅: