“无法确定目标的链接语言...”子目录中的问题

时间:2014-07-10 22:45:04

标签: cmake codeblocks

在我项目的主文件夹中,我有一个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 文件中包含导致此错误的两行时(修改为在目录中更改正常工作),它可以正常工作。

这里出了什么问题?

1 个答案:

答案 0 :(得分: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})