如何在cmake中指定线程依赖项,以便以跨平台的方式分发仅标头的库? 我正在为一个漂亮的C++小标题库做贡献,我正在修复CGOLE,使该库可以被其他项目正确安装和查找。库本身确实使用stl的各个部分,包括需要手动链接的部分。具体地说,它使用了std::thread等。如何以跨平台的方式指定仅头库依赖于linux上的链接pthread,而在windows或其他平台上执行其他操作

如何在cmake中指定线程依赖项,以便以跨平台的方式分发仅标头的库? 我正在为一个漂亮的C++小标题库做贡献,我正在修复CGOLE,使该库可以被其他项目正确安装和查找。库本身确实使用stl的各个部分,包括需要手动链接的部分。具体地说,它使用了std::thread等。如何以跨平台的方式指定仅头库依赖于linux上的链接pthread,而在windows或其他平台上执行其他操作,c++,cmake,cross-platform,C++,Cmake,Cross Platform,也许这不是问题,但我认为您应该在linux上执行类似的操作: target_link_options(header-only-project INTERFACE -pthread) 然而,这在windows上会感觉不合适(我猜你在那里得到的线程没有额外的链接器标志?)。在分发尚未以二进制形式存在的库时,以跨平台方式指定这样的依赖项的正确方法是什么?CMake附带的线程包正是出于此目的: find_package(Threads REQUIRED) target_link_libraries(h

也许这不是问题,但我认为您应该在linux上执行类似的操作:

target_link_options(header-only-project INTERFACE -pthread)

然而,这在windows上会感觉不合适(我猜你在那里得到的线程没有额外的链接器标志?)。在分发尚未以二进制形式存在的库时,以跨平台方式指定这样的依赖项的正确方法是什么?

CMake附带的
线程
包正是出于此目的:

find_package(Threads REQUIRED)
target_link_libraries(header-only-project INTERFACE Threads::Threads)

啊,是的,我知道这一点,但我担心的主要事情是下游项目知道我的仅头库依赖于
Threads::Threads
。我假设
Threads::Threads
是一个目标,根据运行
find_包(Threads)
的平台,它的解析方式会有所不同。我不明白如何笼统地说,嘿,当您使用我的仅标题库时,您将需要依赖于
Threads::Threads
,在您的系统上运行的任何东西。也许这正是它的工作原理,我刚刚假设线程目标是特定于平台的。啊,但也许这确实不是问题,因为执行上述cmake的
add_子目录
确实会运行
find_package
并仅在目标平台上解析
线程
目标。哈哈哈,很抱歉花了这么长时间才让它慢慢沉入。。这种理解正确吗?关于
package\u config\u文件
s呢?通过传递线程依赖关系,它们会正常工作吗?我想他们也会这样做,因为您可能必须
在目标平台上安装
他们。“当您使用我的header only库时,您将需要依赖Threads::Threads”。这就是
target\u link\u libraries()
所做的。任何依赖于您的库的目标都将“继承”依赖关系。“包配置文件”又如何?只要您
导出目标本身,而不仅仅是头文件和二进制文件,它就应该“正常工作”。