14

首先,我查看了这篇文章,但找不到解决问题的方法。我正在尝试使用两个头文件在文件夹中设置一个库并与我的主程序链接,在我的文件夹容器中它包括:

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 文件有关。

4

2 回答 2

16

您已经添加了创建container库的目标。该目标仅包含头文件。请参阅CMake 文档

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

add_library([静态|共享|模块][排除_FROM_ALL] source1 source2 ... sourceN)

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

但是您不能仅从没有任何 cpp 文件的头文件构建库。这就是为什么你得到这样的错误。

于 2013-05-20T19:03:05.453 回答
0

由于这是“CMake 无法确定目标的链接器语言”的规范答案,我发现当尝试将 C 代码链接到 C++ 代码并让其他一切看似正确时,这个随机论坛帖子就是答案:

尝试改变

项目(HelloWorld C)

进入

项目(HelloWorld C CXX)

要不就

项目(HelloWorld)

(来源:https ://exceptionshub.com/cmake-unable-to-determine-linker-language-with-c.html )

我注意到你已经在你的代码中这样做了,但我想把它留在这里,以防其他人因为不同的原因出现同样的错误

于 2020-11-30T00:31:53.917 回答