<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=CMake_find_package</id>
	<title>CMake find package - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=CMake_find_package"/>
	<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=CMake_find_package&amp;action=history"/>
	<updated>2026-11-01T20:53:56Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=CMake_find_package&amp;diff=679&amp;oldid=prev</id>
		<title>SanzSkuy: Created page with &quot;&lt;code&gt;find_package&lt;/code&gt; adalah command CMake untuk mendeteksi library eksternal yang sudah terinstall di sistem. CMake akan mencari konfigurasi library tersebut, lalu mengekspos &#039;&#039;&#039;imported target&#039;&#039;&#039; yang bisa langsung dipakai di &lt;code&gt;target_link_libraries&lt;/code&gt;.  &lt;syntaxhighlight lang=&quot;cmake&quot;&gt; find_package(&lt;NamaPackage&gt; [version] [REQUIRED] [COMPONENTS ...]) &lt;/syntaxhighlight&gt;  ; &lt;code&gt;REQUIRED&lt;/code&gt; : Build langsung gagal jika library tidak ditemukan. ; &lt;code&gt;COMP...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=CMake_find_package&amp;diff=679&amp;oldid=prev"/>
		<updated>2026-06-19T03:32:02Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;code&amp;gt;find_package&amp;lt;/code&amp;gt; adalah command CMake untuk mendeteksi library eksternal yang sudah terinstall di sistem. CMake akan mencari konfigurasi library tersebut, lalu mengekspos &amp;#039;&amp;#039;&amp;#039;imported target&amp;#039;&amp;#039;&amp;#039; yang bisa langsung dipakai di &amp;lt;code&amp;gt;target_link_libraries&amp;lt;/code&amp;gt;.  &amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot;&amp;gt; find_package(&amp;lt;NamaPackage&amp;gt; [version] [REQUIRED] [COMPONENTS ...]) &amp;lt;/syntaxhighlight&amp;gt;  ; &amp;lt;code&amp;gt;REQUIRED&amp;lt;/code&amp;gt; : Build langsung gagal jika library tidak ditemukan. ; &amp;lt;code&amp;gt;COMP...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;code&amp;gt;find_package&amp;lt;/code&amp;gt; adalah command CMake untuk mendeteksi library eksternal yang sudah terinstall di sistem. CMake akan mencari konfigurasi library tersebut, lalu mengekspos &amp;#039;&amp;#039;&amp;#039;imported target&amp;#039;&amp;#039;&amp;#039; yang bisa langsung dipakai di &amp;lt;code&amp;gt;target_link_libraries&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
find_package(&amp;lt;NamaPackage&amp;gt; [version] [REQUIRED] [COMPONENTS ...])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;REQUIRED&amp;lt;/code&amp;gt; : Build langsung gagal jika library tidak ditemukan.&lt;br /&gt;
; &amp;lt;code&amp;gt;COMPONENTS&amp;lt;/code&amp;gt; : Beberapa package punya sub-komponen (misal Boost punya &amp;lt;code&amp;gt;filesystem&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;thread&amp;lt;/code&amp;gt;, dll).&lt;br /&gt;
&lt;br /&gt;
== Dua Mode Pencarian ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Module Mode (Find&amp;lt;Package&amp;gt;.cmake) ===&lt;br /&gt;
&lt;br /&gt;
CMake mencari file bernama &amp;lt;code&amp;gt;Find&amp;lt;NamaPackage&amp;gt;.cmake&amp;lt;/code&amp;gt; di direktori built-in-nya:&lt;br /&gt;
&lt;br /&gt;
 /usr/share/cmake/Modules/FindMPI.cmake&lt;br /&gt;
 /usr/share/cmake/Modules/FindOpenCL.cmake&lt;br /&gt;
 /usr/share/cmake/Modules/FindBoost.cmake&lt;br /&gt;
 ... dst&lt;br /&gt;
&lt;br /&gt;
File ini ditulis oleh tim CMake dan sudah bundled bersama instalasi CMake. File inilah yang berisi logika untuk mendeteksi library (scan path, cek header, cek linker flags, dll), sekaligus mendefinisikan imported target yang tersedia setelah &amp;lt;code&amp;gt;find_package&amp;lt;/code&amp;gt; berhasil.&lt;br /&gt;
&lt;br /&gt;
Untuk melihat daftar semua Find modules bawaan:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /usr/share/cmake/Modules/Find*.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Config Mode (&amp;lt;Package&amp;gt;Config.cmake) ===&lt;br /&gt;
&lt;br /&gt;
Jika tidak ada Find module bawaan, CMake mencari file &amp;lt;code&amp;gt;&amp;lt;NamaPackage&amp;gt;Config.cmake&amp;lt;/code&amp;gt; yang di-install oleh library itu sendiri ke sistem (biasanya di &amp;lt;code&amp;gt;/usr/lib/cmake/&amp;lt;/code&amp;gt; atau &amp;lt;code&amp;gt;/usr/local/lib/cmake/&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 /usr/lib/cmake/OpenCV/OpenCVConfig.cmake&lt;br /&gt;
 /usr/lib/cmake/fmt/fmtConfig.cmake&lt;br /&gt;
&lt;br /&gt;
Library modern biasanya menyediakan file ini agar bisa ditemukan oleh CMake.&lt;br /&gt;
&lt;br /&gt;
== Cara Tau Nama Package yang Valid ==&lt;br /&gt;
&lt;br /&gt;
Nama yang ditulis di &amp;lt;code&amp;gt;find_package(XYZ)&amp;lt;/code&amp;gt; harus &amp;#039;&amp;#039;&amp;#039;persis cocok&amp;#039;&amp;#039;&amp;#039; (case-sensitive) dengan nama file &amp;lt;code&amp;gt;FindXYZ.cmake&amp;lt;/code&amp;gt; atau &amp;lt;code&amp;gt;XYZConfig.cmake&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Lihat semua Find modules yang tersedia di sistem&lt;br /&gt;
ls /usr/share/cmake/Modules/Find*.cmake&lt;br /&gt;
&lt;br /&gt;
# Atau cari nama spesifik&lt;br /&gt;
ls /usr/share/cmake/Modules/ | grep -i mpi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cara Tau Nama Imported Target ==&lt;br /&gt;
&lt;br /&gt;
Setelah &amp;lt;code&amp;gt;find_package&amp;lt;/code&amp;gt; sukses, dia membuat satu atau lebih &amp;#039;&amp;#039;&amp;#039;imported target&amp;#039;&amp;#039;&amp;#039;. Nama target ini didefinisikan di dalam file &amp;lt;code&amp;gt;Find&amp;lt;Package&amp;gt;.cmake&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cara menemukannya:&lt;br /&gt;
&lt;br /&gt;
=== A. Baca langsung file .cmake-nya ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Cari baris yang mendefinisikan imported target&lt;br /&gt;
grep -i &amp;quot;add_library.*IMPORTED\|INTERFACE_INCLUDE\|MPI::&amp;quot; \&lt;br /&gt;
    /usr/share/cmake/Modules/FindMPI.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== B. Baca dokumentasi CMake ===&lt;br /&gt;
&lt;br /&gt;
Setiap Find module bawaan punya halaman dokumentasi resmi di https://cmake.org/cmake/help/latest/module/FindMPI.html (ganti &amp;lt;code&amp;gt;FindMPI&amp;lt;/code&amp;gt; dengan nama module yang dicari).&lt;br /&gt;
&lt;br /&gt;
=== C. Gunakan &amp;lt;code&amp;gt;cmake --help-module&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cmake --help-module FindMPI&lt;br /&gt;
cmake --help-module FindOpenCL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contoh: MPI dan OpenCL ==&lt;br /&gt;
&lt;br /&gt;
=== MPI ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
find_package(MPI REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Imported target yang tersedia setelah ini:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Target !! Kegunaan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MPI::MPI_C&amp;lt;/code&amp;gt; || Untuk kode C&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MPI::MPI_CXX&amp;lt;/code&amp;gt; || Untuk kode C++&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MPI::MPI_Fortran&amp;lt;/code&amp;gt; || Untuk kode Fortran&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cara CMake mendeteksi MPI: mencari program &amp;lt;code&amp;gt;mpicc&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;mpicxx&amp;lt;/code&amp;gt; di PATH, lalu mengekstrak flags compile dan link dari sana.&lt;br /&gt;
&lt;br /&gt;
=== OpenCL ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
find_package(OpenCL REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Imported target yang tersedia:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Target !! Kegunaan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;OpenCL::OpenCL&amp;lt;/code&amp;gt; || Satu-satunya target, untuk semua bahasa&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cara CMake mendeteksi OpenCL: mencari header &amp;lt;code&amp;gt;CL/cl.h&amp;lt;/code&amp;gt; atau &amp;lt;code&amp;gt;OpenCL/cl.h&amp;lt;/code&amp;gt;, dan library &amp;lt;code&amp;gt;libOpenCL.so&amp;lt;/code&amp;gt; di path sistem.&lt;br /&gt;
&lt;br /&gt;
== Alur Kerja Lengkap ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find_package(MPI REQUIRED)&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
CMake baca FindMPI.cmake&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
FindMPI.cmake scan sistem&lt;br /&gt;
  - cek PATH untuk mpicc/mpicxx&lt;br /&gt;
  - ekstrak -I (include) dan -l (link) flags&lt;br /&gt;
      │&lt;br /&gt;
      ├─ Tidak ketemu ──► Error (karena REQUIRED)&lt;br /&gt;
      │&lt;br /&gt;
      └─ Ketemu ──► Buat imported target MPI::MPI_CXX&lt;br /&gt;
                          │&lt;br /&gt;
                          ▼&lt;br /&gt;
            target_link_libraries(matmul PRIVATE MPI::MPI_CXX)&lt;br /&gt;
                          │&lt;br /&gt;
                          ▼&lt;br /&gt;
            CMake otomatis tambahkan include path&lt;br /&gt;
            dan linker flags dari MPI ke binary matmul&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variabel yang Di-set oleh find_package ==&lt;br /&gt;
&lt;br /&gt;
Selain imported target (cara modern), &amp;lt;code&amp;gt;find_package&amp;lt;/code&amp;gt; juga men-set variabel lama (cara lama, masih valid):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Variabel !! Isi&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MPI_FOUND&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;TRUE&amp;lt;/code&amp;gt; jika ditemukan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MPI_CXX_INCLUDE_DIRS&amp;lt;/code&amp;gt; || Path ke header MPI&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MPI_CXX_LIBRARIES&amp;lt;/code&amp;gt; || Path ke file library MPI&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MPI_CXX_COMPILE_FLAGS&amp;lt;/code&amp;gt; || Flag compiler untuk MPI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Cara modern (imported target) lebih direkomendasikan karena tidak perlu urus variabel-variabel ini secara manual.&lt;br /&gt;
&lt;br /&gt;
== Tips Debugging ==&lt;br /&gt;
&lt;br /&gt;
Jika &amp;lt;code&amp;gt;find_package&amp;lt;/code&amp;gt; gagal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Jalankan cmake dengan output verbose untuk melihat apa yang dicari&lt;br /&gt;
cmake -DCMAKE_FIND_DEBUG_MODE=ON ..&lt;br /&gt;
&lt;br /&gt;
# Cek apakah library terinstall&lt;br /&gt;
dpkg -l | grep -i libmpi        # Debian/Ubuntu&lt;br /&gt;
pacman -Q | grep -i mpi         # Arch Linux&lt;br /&gt;
&lt;br /&gt;
# Cek apakah mpicc tersedia di PATH&lt;br /&gt;
which mpicc&lt;br /&gt;
mpicc --showme                  # Lihat flags yang dipakai&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Referensi ==&lt;br /&gt;
&lt;br /&gt;
* [https://cmake.org/cmake/help/latest/command/find_package.html Dokumentasi find_package]&lt;br /&gt;
* [https://cmake.org/cmake/help/latest/module/FindMPI.html FindMPI module]&lt;br /&gt;
* [https://cmake.org/cmake/help/latest/module/FindOpenCL.html FindOpenCL module]&lt;/div&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
</feed>