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

时间:2013-05-20 18:15:19

标签: c++ cmake

首先,我看了一下this帖子,找不到解决问题的方法。我正在尝试使用两个头文件在一个文件夹中设置一个库并链接到我的主程序,在我的文件夹 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 个答案:

答案 0 :(得分:12)

您已添加用于创建container库的目标。该目标仅包含头文件。见CMake documentation

  

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

     

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

     

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

但是你不能在没有任何cpp文件的情况下从头文件构建库。这就是你遇到这样的错误的原因。

答案 1 :(得分:0)

因为这是“ CMake无法确定目标程序的链接器语言”的规范答案,所以我发现,当尝试将C代码链接到c ++代码并且看起来其他所有内容都正确时,此随机论坛帖子就是答案:

尝试更改

PROJECT(HelloWorld C)

进入

PROJECT(HelloWorld C CXX)

或者只是

PROJECT(HelloWorld)

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

我注意到您已经在代码中进行了此操作,但是我想将其保留在此处,以防其他人因不同的原因而遇到相同的错误