2015-10-20 4 views
2

Я начал копать под капотом, чтобы я мог лучше понять внутреннюю работу CMake. Я просматривал файлы в каталоге модулей, чтобы понять, как/почему/когда что-то происходит при запуске CMake.Где установлены CMAKE_HOST_APPLE/CMAKE_HOST_UNIX/CMAKE_HOST_WIN32?

Я до сих пор не мог определить, как и где установлены переменные CMAKE_HOST_APPLE/CMAKE_HOST_UNIX/CMAKE_HOST_WIN32.

Может ли кто-нибудь просветить меня?

Относительно примечания, я проходил через файлы модулей случайным образом, так как я не знаю порядок их инициирования/обработки.

Есть ли где-нибудь, что описывает этот поток или, по крайней мере, указывает начальную точку, чтобы я мог выяснить остальное оттуда?

ответ

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 действительно видит работу: