C++ Academy · Pelajaran

Target, Penautan, dan Visibilitas PUBLIC PRIVATE

Definisikan target, tautkan pustaka, dan gunakan visibilitas PUBLIC, PRIVATE, serta INTERFACE dengan benar

Pelajaran 2 dari 415 langkah

Target, Penautan, dan Visibilitas PUBLIC PRIVATE adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Target adalah Unit Pembangunan

CMake modern berpusat pada target—berkas yang dapat dieksekusi, pustaka, atau kumpulan yang hanya berupa antarmuka. Properti dikaitkan dengan target dan diteruskan melalui penautan.

Menambahkan Target

Gunakan add_executable, add_library, atau add_library(... INTERFACE).

add_executable(myapp src/main.cpp)
add_library(mylib STATIC src/lib.cpp)
add_library(headers INTERFACE)

target_link_libraries

Tautkan target ke pustaka. Argumen ketiga mengendalikan visibilitas.

target_link_libraries(myapp PRIVATE mylib)

Visibilitas PUBLIC PRIVATE INTERFACE

Tiga tingkat visibilitas—ketiganya mengendalikan apakah dependensi diteruskan kepada pengguna target ini:

  • PRIVATE — digunakan untuk membangun target ini; tidak diekspos
  • INTERFACE — digunakan oleh pengguna; bukan oleh target ini
  • PUBLIC — keduanya

Memvisualisasikan Penerusan

Jika mylib menautkan fmt sebagai PUBLIC, target apa pun yang menautkan mylib juga memperoleh direktori include milik fmt. PRIVATE berarti pengguna tidak dapat melihat fmt.

target_include_directories

Tetapkan direktori include per target. Gunakan PUBLIC untuk header yang akan di-#include oleh pengguna; gunakan PRIVATE untuk header internal.

target_include_directories(mylib
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)

target_compile_definitions

Tetapkan makro praprosesor untuk target.

target_compile_definitions(mylib PUBLIC MYLIB_VERSION_MAJOR=1)

target_compile_features

Minta fitur bahasa tertentu, misalnya standar C++.

target_compile_features(mylib PUBLIC cxx_std_20)

Pustaka Antarmuka

Pustaka INTERFACE tidak memiliki keluaran terkompilasi. Gunakan pustaka ini untuk menggabungkan opsi kompilasi, header, atau penautan yang seharusnya diwarisi oleh pengguna.

add_library(strict_warnings INTERFACE)
target_compile_options(strict_warnings INTERFACE -Wall -Wextra)

# now any target can opt in
target_link_libraries(myapp PRIVATE strict_warnings)

Pustaka Hanya Header

Untuk pustaka yang hanya berisi header, deklarasikan pustaka INTERFACE dan tetapkan direktori include sebagai INTERFACE.

Alias

Buat alias berruang nama untuk perintah penautan yang lebih jelas.

add_library(MyProject::mylib ALIAS mylib)
target_link_libraries(consumer PRIVATE MyProject::mylib)

Urutan Penautan

CMake biasanya menyelesaikan urutan penautan dengan benar. Untuk kasus melingkar yang rumit, gunakan tanda penaut --start-group atau susun ulang struktur pustaka Anda.

Kesalahan Umum: include_directories Global

Hindari perintah global include_directories. Gunakan target_include_directories agar header hanya dikaitkan dengan target tertentu.

Pemeriksaan Singkat

Apa arti target_link_libraries(mylib PUBLIC fmt) bagi target yang menautkan mylib?

Ringkasan

CMake modern menggunakan target sebagai unit kerja. Tetapkan properti dengan perintah target_* dan gunakan PUBLIC/PRIVATE/INTERFACE untuk mengendalikan cara properti diteruskan kepada pengguna.

Gratis untuk memulai

Belajar C++ dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Target, Penautan, dan Visibilitas PUBLIC PRIVATE” gratis?

Ya — teks lengkap “Target, Penautan, dan Visibilitas PUBLIC PRIVATE” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Target, Penautan, dan Visibilitas PUBLIC PRIVATE”?

Definisikan target, tautkan pustaka, dan gunakan visibilitas PUBLIC, PRIVATE, serta INTERFACE dengan benar Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Target, Penautan, dan Visibilitas PUBLIC PRIVATE” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tata Letak Proyek CMake dan CMakeLists.txt
  2. Target, Penautan, dan Visibilitas PUBLIC PRIVATE
  3. Menggunakan vcpkg dan Conan untuk Dependensi
  4. Membuat File IDE dan Build Lintas Platform
← Kembali ke C++ Academy