您如何在 cmake 中指定线程依赖性以便以 cross-platform 方式分发 header-only 库?

How do you specify a threads dependency in cmake for distributing a header-only library in a cross-platform way?

我正在为一个漂亮的小 c++ header-only 库做贡献,我正在修复 cmake 以使库可以正确安装并 findable/usable 由其他项目。该库本身确实使用了 stl 的各个部分,包括您需要手动 link 的那些部分。具体来说,它利用了 std::thread 等。如何以 cross-platform 方式指定 header-only 库依赖于 link 在 linux 上 pthread 但在 [=26= 上做其他事情] 还是其他平台?

也许这是一个 non-issue 但我认为你应该为 linux 做这样的事情:

target_link_options(header-only-project INTERFACE -pthread)

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

CMake 附带 Threads 包就是为了这个目的:

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