如何正确组织具有多个子目录的 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(...)
.
我有这个项目结构:
我正在尝试正确设置 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(...)
.