CMake 无法确定目标的链接器语言

15

首先,我查看了这个帖子,并没有找到解决方案。我正在尝试使用两个头文件在一个文件夹中设置库,并将其与我的主程序链接,在我的container文件夹中包括:

linkedStack.h
linkedQueue.h

我容器文件夹中的CMakeLists.txt是

add_library(container linkedQueue.h linkedStack.h)

install (TARGETS container DESTINATION bin)
install (FILES linkedQueue.h linkedStack.h DESTINATION include)

我的源代码目录中的CMakeLists.txt文件内容如下:

cmake_minimum_required(VERSION 2.6)
project(wordLadder)

# set version number
set (MAJOR 1)
set (MINOR 0)

# configure header file to be placed in binary
configure_file(
        "${PROJECT_SOURCE_DIR}/ladderConfig.h.in"
        "${PROJECT_BINARY_DIR}/ladderConfig.h"
)

# add binary tree to search path for include files
# so we can find config
include_directories("${PROJECT_BINARY_DIR}")

#add container library
include_directories ("${PROJECT_SOURCE_DIR}/container")
add_subdirectory(container)

#add executable
add_executable(wordLadder ladderMain.cpp)
target_link_libraries (wordLadder container)

install (TARGETS wordLadder DESTINATION bin)
install (FILES "${PROJECT_BINARY_DIR}/ladderConfig.h"
         DESTINATION include)

以及我收到的错误:

CMake Error: Cannot determine link language for target "container".
CMake Error: CMake can not determine linker language for target:container
-- Generating done
-- Build files have been written to: /home/gmercer/Linux_dev/wordLadder/build

我不确定我在这里做错了什么,但我认为这与我的库的CMake文件有关。

2个回答

16
您已添加目标以创建 container 库。该目标仅包含头文件。请参见CMake文档

add_library:使用指定的源文件向项目添加库。

add_library([STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)

将名为 的库目标添加到命令调用中列出的源文件中构建。 对应于逻辑目标名称,必须在项目范围内全局唯一。构建的库的实际文件名是根据本地平台的约定构造的(例如 lib.a 或 .lib)。

但是,您不能仅从头文件构建库而没有任何 cpp 文件。这就是为什么会出现这样的错误的原因。


我该如何链接头文件?它们都是模板类,因此不包含.cpp文件。 - Syntactic Fructose
1
@Need4Sleep,你已经添加了include_directories("${PROJECT_SOURCE_DIR}/container"),因此编译器会在没有特殊的container库的情况下找到你的头文件。你不需要container - Nikolay Viskov
当我将所有的源文件放入单独的库中,并仅在我的主可执行文件构建中列出生成的标头时,我遇到了相同的问题。 - John

3
作为“CMake无法确定目标的链接器语言”的规范答案,当我尝试将C代码链接到C++代码并且其他一切似乎都正确时,我发现这个随机论坛帖子是答案:
尝试将
PROJECT(HelloWorld C)
改为
PROJECT(HelloWorld C CXX)
或者只是
PROJECT(HelloWorld)
(来源:https://exceptionshub.com/cmake-unable-to-determine-linker-language-with-c.html
我注意到您已经在您的代码中这样做了,但我想把它留在这里,以防其他人出现了不同原因导致相同的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接