什么是关键词的含义PUBLIC,PRIVATE以及INTERFACE相关的CMake的target_include_directories?
我有一个cmake构建,我正在搜索一堆依赖项,即我有很多实例:
FIND_PACKAGE(SomePackage)
if(SOMEPACKAGE_FOUND)
include_directories(${SOMEPACKAGE_INCLUDE_DIR})
link_libraries(${SOMEPACKAGE_LIBRARIES})
endif(SOMEPACKAGE_FOUND)
Run Code Online (Sandbox Code Playgroud)
现在,我想添加一个自定义命令来构建一个预编译的头文件,但要做到这一点,我需要知道我的include_directories调用添加的所有路径.如何获取这些目录的列表(最好使用正确的-I/path/to/directory格式),以便我可以将它们添加到我的自定义命令中?
我需要帮助为C++项目编写一个好的CMakeLists.txt.
我寻找答案,但我发现了什么.这是我的项目结构:
MainProj
| ProjLib/
| | include/
| | | proj_lib.h
| | src/
| | | proj_lib.cc
| | CMakeLists.txt
| ProjExec/
| | include/
| | | proj_exec.h
| | src/
| | | proj_exec.cc
| | CMakeLists.txt
| CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
MainProj CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(MainProj CXX)
# enable C and C++ language
enable_language(C CXX)
# Add sub-directories
add_subdirectory(ProjLib)
add_subdirectory(ProjExec)
Run Code Online (Sandbox Code Playgroud)
ProjLib CMakeLists.txt
set (PROJLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set (PROJLIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
set(PROJLIB_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/src/proj_lib.cc
)
include_directories("${PROJLIB_SOURCE_DIR}")
include_directories("${PROJLIB_INCLUDE_DIR}")
add_library(ProjLib SHARED ${PROJLIB_SRCS} ${PROJLIB_INCLUDE_DIR})
target_include_directories …Run Code Online (Sandbox Code Playgroud) target_include_directories我正在阅读一个大项目的 cmakelist 文件,并对和 的用法感到困惑include_directories。
应该include_directories能够将所有头文件添加到编译器搜索的路径。但我仍然target_include_directories在子目录的 cmakelist 文件中看到一些内容,它们为特定目标指定了一些包含路径。
谁能解释一下这两个的用法吗?就我而言,添加头文件的所有路径就include_directories足够了。
我正在为一个使用 CMake 的大型 C++ 项目而苦苦挣扎。现在我正在尝试添加一个依赖项(一个预编译和安装的库),但我不确定添加的位置、包含的内容以及链接它的位置。
特别是,我想知道以下命令之间的区别:
include_directoriestarget_include_directorieslink_librariestarget_link_libraries另外,当我需要使用以下命令时:
find_package 和add_library我知道它与仅标头库等有关,但我找不到易于理解和简洁的解释。
另外,我应该如何处理以下情况:
包含的库需要例如 Boost,但核心项目不需要。如何避免使整个CMakeLists.txt文件和二进制文件膨胀,并且仍然使用预编译库?(我认为这也是这个问题的一部分)