关于现代 CMake 结构的说明
Clarification about modern CMake structure
我不是专家 C 或 C++ 程序员,但我必须为两个课程项目编写一个 C 和一个 C++ 应用程序。为了从右脚开始,我正在阅读关于 how to structure the code of a CMake project 的指南。
我想澄清一下include
目录的含义和用法:
- 如果项目是一个库,
include
目录是否意味着包含库的用户可以在其代码中包含和调用的 API 函数?如果是这样,包含内部函数声明的 header 应该使用哪个目录?这些 header 是否应该与源代码(包含在 src
目录中)放在一起?
- 如果项目是一个应用程序,
include
目录是否意味着包含源代码的header文件?如果是这样,将 header 与来源分开有什么好处?这只是组织偏好的问题吗?
感谢您的任何见解。
如果您正在编写应用程序,则可以将内容放在任何您想要的地方。用户大多希望您有一个包含二进制可执行文件的 bin
子目录。哦,请支持 CMAKE_INSTALL_PREFIX
:in-source 构建是邪恶的,就我而言。
如果您正在编写一个库,用户希望安装前缀位置中的子目录 include
和 lib
。对于漂亮的 unix-y 内容,如果您知道如何生成 troff,您可以包含 man
。
关于 include
目录。你可以把你的 mylib.h
文件直接放在那里,但是如果你的库有一个共同的名字,比如 format
,这可能会导致名称冲突,所以现在很多包将它组织为 /home/mylibinstallation/include/mylibrary/mylib.h
.然后你会 export MYLIBINC=/home/mylibinstallation/include
并且程序会`#include "mylibrary/mylib.h"。如果您有多个包含,那么额外的级别也很好。
我不是专家 C 或 C++ 程序员,但我必须为两个课程项目编写一个 C 和一个 C++ 应用程序。为了从右脚开始,我正在阅读关于 how to structure the code of a CMake project 的指南。
我想澄清一下include
目录的含义和用法:
- 如果项目是一个库,
include
目录是否意味着包含库的用户可以在其代码中包含和调用的 API 函数?如果是这样,包含内部函数声明的 header 应该使用哪个目录?这些 header 是否应该与源代码(包含在src
目录中)放在一起? - 如果项目是一个应用程序,
include
目录是否意味着包含源代码的header文件?如果是这样,将 header 与来源分开有什么好处?这只是组织偏好的问题吗?
感谢您的任何见解。
如果您正在编写应用程序,则可以将内容放在任何您想要的地方。用户大多希望您有一个包含二进制可执行文件的 bin
子目录。哦,请支持 CMAKE_INSTALL_PREFIX
:in-source 构建是邪恶的,就我而言。
如果您正在编写一个库,用户希望安装前缀位置中的子目录 include
和 lib
。对于漂亮的 unix-y 内容,如果您知道如何生成 troff,您可以包含 man
。
关于 include
目录。你可以把你的 mylib.h
文件直接放在那里,但是如果你的库有一个共同的名字,比如 format
,这可能会导致名称冲突,所以现在很多包将它组织为 /home/mylibinstallation/include/mylibrary/mylib.h
.然后你会 export MYLIBINC=/home/mylibinstallation/include
并且程序会`#include "mylibrary/mylib.h"。如果您有多个包含,那么额外的级别也很好。