CMake-MSVC变量仅在调用项目后填充



我想为每个编译器创建我的项目名称(MSVC或GNU的名称不同(。

我有以下代码:

if(MSVC)
project(Block3Windows ...)
else()
project(Block3Linux ..)
endif()

这是CMakeLists.txt文件中的第一个命令。然而,它总是进入else块。

MSVC变量似乎是在调用项目后才填充的,为了测试它,我写了以下内容:

if(MSVC)
message(MSVC)
endif()
message(MSVC)
project(Block3Windows ...)
message("After Project")
message(MSVC)

我打印了以下内容:

首次运行:

After Project
MSVC

第二次及以后的运行(带缓存(:

MSVC
After Project
MSVC

为什么第一个条件中的MSVC从未被打印?

MSVC文档中未提及此行为

我是不是错过了什么?如何在编译器环境中为每个逻辑创建项目名称?

我正在使用CMake 3.17.2

只对项目进行一个通用的初始调用,然后在第二次调用项目时选择名称。

project(Block3)
if(MSVC)
project(Block3Windows)
else()
project(Block3Linux)
endif()

但我认为你可以通过来确定系统

include(CMakeDetermineSystem)
if (MSVC)
...

最新更新