【问题标题】:Target <target name> OUTPUT_NAME depends on itself目标 <目标名称> OUTPUT_NAME 依赖于自身
【发布时间】:2021-04-02 12:02:39
【问题描述】:

我正在使用 python 的 cmake-converter 从 .sln 项目生成 cmake 文件。

在 Visual Studio 中,我正在尝试为 WSL-GCC-Debug 配置生成 cmake 文件。

当 Visual Studio 启动 CMake 生成时,我收到此错误

[CMake] /CMakeLists.txt:220 (add_library) 处的 CMake 错误:

[CMake] Target '' OUTPUT_NAME 依赖于自身。

CMakeLists.txt 看起来像这样:

1 set(PROJECT_NAME Example)
2 set(no_group_source_files
...
100 Example.h
...
180 )
181 source_group("" FILES ${no_group_source_files})
182 set(ALL_FILES
183    ${no_group_source_files}
184 )
...
220 add_library(${PROJECT_NAME} SHARED ${ALL_FILES})

关于这个 here 有一个未解决的问题,但我没有看到对我的案子有帮助的答案

我是 cmake 的新手,正在尝试调试它。有谁知道为什么会发生这种情况以及我该如何解决?

【问题讨论】:

  • 看起来像是在您为库目标设置OUTPUT_NAME 属性作为生成器表达式的代码中的某处。这个生成器表达式依赖于那个属性。参见例如CMake 测试中的一个文件会导致类似的错误消息:gitlab.kitware.com/cmake/cmake/-/blob/….
  • 你好@Tsyvarev,也许错误是由这段代码生成的$&lt;TARGET_GENEX_EVAL:Example,$&lt;TARGET_PROPERTY:Example,TARGET_NAME_$&lt;UPPER_CASE:$&lt;CONFIG&gt;&gt;&gt;&gt;如果问题的原因是生成表达式依赖于OUTPUT_NAME属性,有没有办法解决它?
  • 不,这个生成器表达式不太可能导致您得到的错误。请注意,生成器表达式本身不会导致错误:此生成器表达式应分配给目标的 属性

标签: c++ visual-studio cmake


【解决方案1】:

最终我找到了解决问题的方法。

编辑 CMake 文件夹中的 Default.cmake (CMake/Default.cmake)

改变

create_property_reader("TARGET_NAME")

TARGET_NAME 以外的其他名称,即

create_property_reader("TARGET_NAME_1")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2020-05-25
    • 1970-01-01
    相关资源
    最近更新 更多