在我项目的主文件夹中,我有一个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 文件中包含导致此错误的两行时(修改为在目录中更改正常工作),它可以正常工作。
这里出了什么问题?
答案 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})