【发布时间】:2017-09-23 18:01:52
【问题描述】:
我的项目中有两个实用程序库。我正在寻找为库编写 CMake 配置的最佳方式。
/my_project
--> CMakeLists.txt
--> main.cpp
--> /utils
--> CMakeLists.txt
--> common.h
--> /base_c
--> CMakeLists.txt
--> base_c.c
--> base_c.h
--> /base_cpp
--> CMakeLists.txt
--> base_cpp.cpp
--> base_cpp.hpp
我当前的 CMake 文件:
/my_project/CMakeLists.txt
cmake_minimum_requared(VERSION 3.8)
project(my_project)
add_subdirectory(utils)
add_executable(main main.c)
target_link_libraries(main utils base_c base_cpp)
/my_project/utils/CMakeLists.txt
add_subdirectory(base_c)
add_subdirectory(base_cpp)
add_library(utils)
target_sources(utils PUBLIC common.h)
/my_project/utils/base_c/CMakeLists.txt
add_library(base_c base_c.c)
target_sources(base_c PUBLIC base_c.h)
/my_project/utils/base_cpp/CMakeLists.txt
add_library(base_cpp base_cpp.cpp)
target_sources(base_cpp PUBLIC base_cpp.hpp)
find_library(BASEC base_c ../base_c)
target_link_libraries(base_cpp BASEC)
问题是base_cpp 找不到来自base_c 的包含。我应该如何修复配置?
我设法让它与target_include_directories(base_cpp PRIVATE ../base_c) 一起工作,但根据INTERFACE_INCLUDE_DIRECTORIES documentation 的说法,这很丑陋,不应该是必要的。
【问题讨论】:
-
INTERFACE_INCLUDE_DIRECTORIES 的文档如何暗示不需要
target_include_directories?我很好奇你是如何在没有include_directories或target_include_directories的情况下编译单个库的。 -
@Tsyvarev 我可能完全错了。你能解释一下我如何使用图书馆的
INTERFACE_INCLUDE_DIRECTORIES吗? -
你在 CMake 之后使用哪个构建系统?生成文件? Visual Studio 项目?你能检查一下哪些目录实际上是作为包含目录传递的那些文件吗?