我想为每个编译器创建我的项目名称(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)
...