我在 C++ 中见过很多这种情况,即开发人员向 CMake 中的库添加一个空源文件。这里有一个示例,其中有一个空源文件,可以在此处找到。\nCMake 文件包含这一行:
\n# build the library\nadd_library(${PROJECT_NAME} STATIC src/dependency-tracker.cc)\nRun Code Online (Sandbox Code Playgroud)\n仅当文件夹中没有其他源文件时才会出现这种情况src,因此该库将是“仅标头”。他们为什么这样做呢?
我指的目录结构:
\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\nRun Code Online (Sandbox Code Playgroud)\n
该项目指定 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为空源文件选择名称。也许,这个名字对于项目的开发人员来说有一些特殊的意义。