2014-07-10 71 views
0

在我的项目的主文件夹,我有一个的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

add_executable导致可执行目标的建立,意味着源代码文件列表的汇编成可执行的二进制文件。

为了这个工作,并且有CMake的选择合适的编译器,源文件的列表中必须包含有“编译”延伸,即至少一个文件。 .C,或的.cpp或.CXX ....

我不明白你为什么要试图在这里编译可执行文件,因为你似乎只是尝试列出的头文件包括到一个项目(只对基于IDE的生成器(如Visual Studio)有意义)。

另外,不建议使用的文件的通配在CMake的,因为如果添加多个文件到您的项目,CMake的不能自动检测到它们,并不会重新建立文件。请明确列出所有文件。

这里的妥善解决是列出在适当add_executable命令调用,你列出你要编译的实际源文件的头文件。

您可能还需要使用source_group()命令,即允许您将文件转换为在生成的Visual Studio解决方案文件夹,例如:

source_group(header_files ${gl_nbody_HEADERS})