CMake ADD_LIBRARY INTERFACE替代方案

时间:2015-03-14 08:00:13

标签: boost cmake threadpool header-only

我正在尝试使用仅标题库(thread-pool)作为子项目。所以在根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),但这仅适用于CMake 3.0并且我已安装2.8。我不是要求有关如何将CMake升级到3.0的解决方案,但有没有alternative way that I can use with CMake 2.6 or 2.8

我想到的一种方法是使用一个带有一些虚拟函数的假cpp文件并将其放在源代码中,但这将是一个糟糕的解决方案。

2 个答案:

答案 0 :(得分: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,因此请不要使用它。

答案 1 :(得分:0)

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

set_target_properties(thread-pool PROPERTIES LINKER_LANGUAGE CXX)