【问题标题】:'Cannot determine link language for target...' issue in sub directory子目录中的“无法确定目标的链接语言...”问题
【发布时间】:2014-07-10 22:45:04
【问题描述】:

在我的项目的主文件夹中,我有一个 CMakeLists.txt 文件。在这个文件中,我包含(使用 add_subdirectory)另一个位于我的头文件目录中的 CMakeLists.txt 文件。第二个文件的职责是将我所有的头文件添加到项目中:

file(GLOB gl_nbody_HEADERS "*.h")

add_executable(gl_nbody ${gl_nbody_HEADERS})

但是,此文件会导致错误:

CMake Error: CMake can not determine linker language for target:gl_nbody
CMake Error: Cannot determine link language for target "gl_nbody".

奇怪的是,当我在我的主 CMakeLists.txt 文件中包含导致此错误的两行时(已修改为可以正常工作以适应目录更改),它工作正常。

这里出了什么问题?

【问题讨论】:

    标签: cmake codeblocks


    【解决方案1】:

    add_executable 导致创建可执行目标,这意味着将源代码文件列表编译为可执行二进制文件。

    为了使其工作,并让 CMake 选择合适的编译器,源文件列表必须包含至少一个具有“可编译”扩展名的文件,即。 .c,或 .cpp,或 .cxx....

    我不明白您为什么要在此处编译可执行文件,因为您似乎只是尝试列出要包含到项目中的头文件(这仅对基于 IDE 的生成器有意义,例如 Visual Studio)。

    另外,不建议在 CMake 中使用文件通配,因为如果您在项目中添加更多文件,CMake 无法自动检测它们,并且不会重新生成构建文件。请明确列出所有文件。

    这里正确的解决方案是在正确的add_executable 命令调用中列出头文件,在该命令调用中列出要编译的实际源文件。

    您可能还想使用source_group() 命令,该命令允许您在生成的 Visual Studio 解决方案中将文件分组到文件夹中,例如:

    source_group(header_files ${gl_nbody_HEADERS})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 2010-12-06
      相关资源
      最近更新 更多