相关疑难解决方法(0)

CMake target_include_directories范围的含义

什么是关键词的含义PUBLIC,PRIVATE以及INTERFACE相关的CMake的target_include_directories

cmake

71
推荐指数
2
解决办法
2万
查看次数

列出CMake中的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格式),以便我可以将它们添加到我的自定义命令中?

cmake

54
推荐指数
1
解决办法
5万
查看次数

cmake:设置多个项目和它们之间的依赖关系

我需要帮助为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)

c++ cmake multiple-projects

8
推荐指数
1
解决办法
5466
查看次数

CMAKE:target_include_directories 和 include_directories

target_include_directories我正在阅读一个大项目的 cmakelist 文件,并对和 的用法感到困惑include_directories

应该include_directories能够将所有头文件添加到编译器搜索的路径。但我仍然target_include_directories在子目录的 cmakelist 文件中看到一些内容,它们为特定目标指定了一些包含路径。

谁能解释一下这两个的用法吗?就我而言,添加头文件的所有路径就include_directories足够了。

cmake

5
推荐指数
1
解决办法
3万
查看次数

(target_)link_libraries 和 (target_)include_directories 之间的区别

我正在为一个使用 CMake 的大型 C++ 项目而苦苦挣扎。现在我正在尝试添加一个依赖项(一个预编译和安装的库),但我不确定添加的位置、包含的内容以及链接它的位置。

特别是,我想知道以下命令之间的区别:

  • include_directories
  • target_include_directories
  • link_libraries
  • target_link_libraries

另外,当我需要使用以下命令时:

  • find_package
  • add_library

我知道它与仅标头库等有关,但我找不到易于理解和简洁的解释。

另外,我应该如何处理以下情况:

包含的库需要例如 Boost,但核心项目不需要。如何避免使整个CMakeLists.txt文件和二进制文件膨胀,并且仍然使用预编译库?(我认为这也是这个问题的一部分)

c++ cmake

3
推荐指数
1
解决办法
3378
查看次数

标签 统计

cmake ×5

c++ ×2

multiple-projects ×1