将空源文件添加到静态库的原因?

Dor*_*ian 3 c++ cmake

我在 C++ 中见过很多这种情况,即开发人员向 CMake 中的库添加一个空源文件。这里有一个示例,其中有一个空源文件,可以在此处找到。\nCMake 文件包含这一行:

\n
# build the library\nadd_library(${PROJECT_NAME} STATIC src/dependency-tracker.cc)\n
Run Code Online (Sandbox Code Playgroud)\n

仅当文件夹中没有其他源文件时才会出现这种情况src,因此该库将是“仅标头”。他们为什么这样做呢?

\n
\n

我指的目录结构:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 include\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 okvis\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kinematics\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 implementation\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Transformation.hpp   <- header only implementation\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 operators.hpp\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Transformation.hpp\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dependency-tracker.cc   <- empty source file\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 runTests.cpp\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 TestTransformation.cpp\n
Run Code Online (Sandbox Code Playgroud)\n

Tsy*_*rev 5

该项目指定 CMake 2.8.11 作为最低要求:

cmake_minimum_required(VERSION 2.8.11)
Run Code Online (Sandbox Code Playgroud)

该版本缺少库类型,而库类型现在是仅标头INTERFACE库的标准表示。(对 INTERFACE 库的支持首先出现在 CMake 3.0 中)。

如果没有INTERFACE可用的库,带有单个空源文件的普通库看起来是一个不错的选择。

我不知道为什么dependency-tracker.cc为空源文件选择名称。也许,这个名字对于项目的开发人员来说有一些特殊的意义。