我有一个 CMake 库add_library(helpers helpers.h)
我想通过以下方式包含源文件target_include_directories
。然后我必须在参数之间进行选择PRIVATE
, PUBLIC
and INTERFACE
.
有什么不同?
-
PRIVATE
:包含只能由助手库本身使用。
-
PUBLIC
:这些包含内容可以由助手库本身以及使用助手库的任何目标使用,例如通过target_link_libraries(MainApplication PUBLIC libhelpers)
.
-
INTERFACE
:包含不能由帮助程序库使用,只能由使用帮助程序库的目标使用。
This example说明了可能的进口。结构:
│ CMakeLists.txt
│ helper.cpp
│ main.cpp
│
├───details_interface
│ details_interface.cpp
│
├───details_private
│ details_private.cpp
│
└───details_public
details_public.cpp
CMakeLists.txt:
cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 17)
project(cmake_experiment)
add_executable(cmake_experiment main.cpp)
target_link_libraries(cmake_experiment libhelper)
add_library(libhelper helper.cpp)
target_include_directories(libhelper
INTERFACE details_interface
PUBLIC details_public
PRIVATE details_private)
主要.cpp:
#include <iostream>
#include "details_public.cpp"
#include "details_interface.cpp"
// fatal error: details_private.cpp: No such file or directory:
// #include "details_private.cpp"
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
助手.cpp:
#include "details_public.cpp"
#include "details_private.cpp"
// fatal error: details_interface.cpp: No such file or directory:
// #include "details_interface.cpp"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)