我正在尝试使用仅标题库(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文件并将其放在源代码中,但这将是一个糟糕的解决方案。
答案 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)