2

我正在尝试使用仅标头库(线程池)作为子项目。所以在根CMakeLists.txt我有

ADD_SUBDIRECTORY(thread_pool)

里面thread-pool/CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(thread-pool)

SET(THREAD_POOL_SOURCES)

ADD_LIBRARY(thread-pool STATIC ${THREAD_POOL_SOURCES})

由于这是一个没有源的仅标头库,因此会出错。

CMake 错误:CMake 无法确定目标的链接器语言:线程池

一种解决方案是使用ADD_LIBRARY(thread-pool INTERFACE)但仅适用于 CMake3.0并且我安装了 2.8。我不是在寻求有关如何将 CMake 升级到 3.0 的解决方案,但有什么解决方案alternative way that I can use with CMake 2.6 or 2.8吗?

我想到的一种方法是拥有一个带有一些虚拟功能的假 cpp 文件并将其放入源中,但这将是一个糟糕的解决方案。

4

2 回答 2

1

对于您的原始问题,请尝试使用

set_target_properties(thread-pool PROPERTIES LINKER_LANGUAGE CXX)
于 2015-03-16T11:38:06.260 回答
0

假设您已经解压了thread-pool源目录根目录下的子目录中的库,并且您的项目结构如下所示:

(root)
 |-- thread-pool
 |   +-- boost
 |       +-- threadpool.hpp
 |-- subproject_A
 |   +-- test.cpp
 +-- CMakeLists.txt

你只需要在根目录下做CMakeLists.txt

include_directories(thread-pool)
...
add_subdirectory(subproject_A)    

访问图书馆。然后在 中test.cpp,您需要做的就是#include "boost/threadpool.hpp"没有相对路径。

add_library只有具有编译组件的库才需要,所以不要使用它。

于 2015-03-14T23:35:55.100 回答