用于具有单个 .h 文件的库的 Cmake

Posted

技术标签:

【中文标题】用于具有单个 .h 文件的库的 Cmake【英文标题】:Cmake for a library with a single .h file 【发布时间】:2013-11-29 02:39:45 【问题描述】:

这肯定是关于 cmake 的一个非常基本的问题,...

我想知道是否有可能或者是否有必要创建一个静态库,例如:libhelloword.a 来自单个 .h 文件的 cpp 代码。

我写了 CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

SET(LIB_HELLOWORLD    "helloworld")

INCLUDE_DIRECTORIES(
  $CMAKE_CURRENT_SOURCE_DIR
)

ADD_LIBRARY($LIB_HELLOWORLD STATIC
  helloworld.h
)

不幸的是,这不起作用。

我明白了

-- Configuring done
CMake Error at CMakeLists.txt:12 (ADD_LIBRARY):
  Cannot find source file:

    helloworld.h

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx


-- Build files have been written to: /path/to/files

我无法运行 make,因为没有创建任何 makefile

任何帮助将不胜感激,因为我迷失在这个 cmake 世界中:p

顺便说一句:.h 文件是一个外部库,(肯定)我无法修改。

【问题讨论】:

你的文件结构是什么样的? 创建只有标题的静态库有什么意义? The .h file is an external library 你的意思是你有外部已经构建的库,helloworld.h 是接口头吗? 【参考方案1】:

你打算如何使用这个库?无论如何,您需要将它的标题包含到您的执行模块中。因此,该头文件中的所有代码都将在那里编译。

但如果你真的想要,你可以创建 helloworld.cpp 并在其中包含 helloworld.h 并以这种方式修改 CMakeList.txt:

ADD_LIBRARY($LIB_HELLOWORLD STATIC helloworld.cpp)

【讨论】:

以上是关于用于具有单个 .h 文件的库的 Cmake的主要内容,如果未能解决你的问题,请参考以下文章

CMake 包含路径 - 依赖于外部库的库

从 CMake 中使用的库继承包含目录

如何修复创建使用 PRIVATE include_directories 的库的 cmake 配置

如何通过CMake查找特定/本地文件

cmake 单个目录多个文件的情况

使用 CMake 查找 libffi 头文件