我发现this question和这个文档条目都建议用户通过使用add_custom_target()
命令或file(GENERATE)
命令来“调试”生成器表达式。
假设你有一个CMakeLists.txt
,如下所示:
cmake_minimum_required(VERSION 3.15)
project(Toy VERSION 1.0)
set(gcc_like_cxx "$<COMPILE_LANG_AND_ID:CXX,ARMClang,AppleClang,Clang,GNU,LCC>")
set(msvc_like_cxx "$<COMPILE_LANG_AND_ID:CXX,MSVC>")
字符串
现在,您需要检查gcc_like_cxx
的值。根据文档,
file(GENERATE OUTPUT hahaha CONTENT ${gcc_like_cxx})
型
或
add_custom_target(genexdebug COMMAND ${CMAKE_COMMAND} -E echo "${gcc_like_cxx}")
型
可以这样做,但两者都产生相同的错误:
$<COMPILE_LANG_AND_ID:lang,id> may only be used with binary targets to
specify include directories, compile definitions, and compile options. It
may not be used with the add_custom_command, add_custom_target, or
file(GENERATE) commands.
型
如果表达式不能与“标准”调试选项一起使用,是否有方法获取生成器表达式的值?
1条答案
按热度按时间h43kikqp1#
1.您需要在CMake版本
3.19
的file(GENERATE)
中使用target
参数。1.您需要在输出文件中添加变量前缀,否则将出现以下错误:
字符串
我在我的服务器上运行以下CMake文件,它可以工作:
型
CMake Gitlab -- file(GENERATE): Add TARGET argument
GitHub问题--因此,我在CMake 3.19中将TARGET参数添加到文件(GENERATE)中