簡體   English   中英

CMake target_include_directories:我使用 PUBLIC、PRIVATE 還是 INTERFACE?

[英]CMake target_include_directories: Do I use PUBLIC, PRIVATE or INTERFACE?

我有一個 CMake 庫add_library(helpers helpers.h)並且我想通過target_include_directories包含源文件。 然后我必須在參數PRIVATEPUBLICINTERFACE之間進行選擇。

有什么區別?

  1. PRIVATE :包含只能由助手庫本身使用。
  2. PUBLIC :helpers-library 本身和使用 helpers-library 的任何目標都可以使用包含,例如通過target_link_libraries(MainApplication PUBLIC libhelpers)
  3. INTERFACE : helpers-library 不能使用包含,只能由使用 helpers-library 的目標使用。

示例說明了可能的導入。 結構:

│   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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM