CMake:输出不能与add_custom_target或file()一起使用的生成器表达式的结果?

h6my8fg2  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(61)

我发现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.


如果表达式不能与“标准”调试选项一起使用,是否有方法获取生成器表达式的值?

h43kikqp

h43kikqp1#

1.您需要在CMake版本3.19file(GENERATE)中使用target参数。
1.您需要在输出文件中添加变量前缀,否则将出现以下错误:

CMake Error in CMakeLists.txt:
  Evaluation file to be written multiple times with different content.  This
  is generally caused by the content evaluating the configuration type,
  language, or location of object files:
    
    /home/user/build/hahaha

字符串
我在我的服务器上运行以下CMake文件,它可以工作:

cmake_minimum_required(VERSION 3.19)

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>")

file(GENERATE OUTPUT "${gcc_like_cxx}/log.txt" CONTENT "${gcc_like_cxx}\n" TARGET ${PROJECT_NAME})

add_executable(Toy toy.c)


CMake Gitlab -- file(GENERATE): Add TARGET argument
GitHub问题--因此,我在CMake 3.19中将TARGET参数添加到文件(GENERATE)中

相关问题