如何正确组织具有多个子目录的 CMake 项目?

How to properly organize a CMake project with multiple subdirectories?

我有这个项目结构:

我正在尝试正确设置 CMakeList.txt 文件。我的目标只是将库链接到 main.cpp。所以我有这些 CMakeList.txt 个文件:

library/CMakeList.txt:

source/CMakeList.txt:

根:

当我尝试构建项目时,出现以下错误: ld: library not found for -lMyLib

哪里错了,这样的项目应该如何合理组织结构?

您使用了 find_library 但您没有使用 ${MyLib} 变量 。查阅 find_library 文档。

您使用了 link_directories,但它位于使用它的目录的本地。上层目录不受影响。

IMPORTED 库或 INTERFACE 库用于 link 和 .a 文件。查看 and 个答案。如果它只有一个库,我认为更喜欢 IMPORTED。将 target_include_directories(Source ...) 移动到 library/CMakeLists.txt,而不是 Source 将包含目录添加到您的库中,它在概念上是库包含目录。

我建议,主观,取决于:将 target_include_directories(Source.. 移到 source/CMakeList.txt 内。 IE。将所有 Source 相关内容保留在 source/CMakeLists.txt 中。也许将 EXCLUDE_FROM_ALL 添加到 add_subdirectory(library).

使用 set_target_properties 而不是 set(CMAKE_CXX_STANDARD。总的来说,更喜欢单独使用 *target* 特定的东西而不是 set(...).