Cara menggunakan CMAKE_INSTALL_PREFIX

97

Saya ingin membuat Makefile dengan target penginstalan, membuat penginstalan ke / usr daripada default / usr / local. Dengan asumsi bahwa membangun direktori dilakukan di subdirektori sumber, saya menjalankan:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txt berisi: CMAKE_INSTALL_PREFIX:PATH=/usr(OK?)

Sekarang saya mengeksekusi:

membuat
buat instal

Semua file masih diinstal ke usr / local. Apa yang salah?

Edit: Tidak ada CMAKE_INSTALL_PREFIX di file proyek CMakeLists.txt mana pun. Sebelum menjalankan cmake, saya menghapus semuanya dari direktori keluaran. menginstal direktif di CMakeLists.txt terlihat seperti:

install(TARGETS mylibrary DESTINATION lib)

Alex F
sumber

Jawaban:

120

Itu seharusnya (lihat dokumen ):

cmake -DCMAKE_INSTALL_PREFIX=/usr ..
Pekerjaan
sumber
30

Ada dua cara untuk menggunakan variabel ini:

  • meneruskannya sebagai argumen baris perintah seperti yang disebutkan Ayub:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • memberikan nilai untuk itu di CMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    Tapi ingat untuk menempatkannya SEBELUM PROJECT(< project_name>) perintah, jika tidak maka tidak akan berhasil!

ryan_tu
sumber
4
Aneh, pernyataan SET () bekerja untuk saya hanya jika saya menempatkannya SETELAH pernyataan PROJECT () (CMake 2.8).
AstroFloyd
2
Jawaban ini dan referensi yang ditautkannya secara lebih langsung membahas masalah perintah sebelum / sesudah project ().
Craig Scott
Apa PROJECTperintah ini dan bagaimana memiliki cmakeopsi ini sebelumnya? Anda akan punya contoh?
Stephane
6

Tapi ingat untuk menempatkannya SEBELUM PROYEK (<project_name>) perintah, jika tidak maka tidak akan berhasil!

Minggu pertama saya menggunakan cmake - setelah beberapa tahun GNU autotools - jadi saya masih belajar (lebih baik daripada menulis makro m4), tapi saya pikir memodifikasi CMAKE_INSTALL_PREFIX setelah mengatur proyek adalah tempat yang lebih baik.

CMakeLists.txt

cmake_minimum_required (VERSION 2.8)

set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
project (BarkBark)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")

Jalankan pertama (tanpa cache)

CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- The C compiler identification is GNU 4.4.7
-- etc, etc,...
CIP = /usr/local (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done

Lari kedua

CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done

Beri tahu saya jika saya salah, saya harus banyak belajar. Itu menyenangkan.

Jim
sumber
Coba gunakan FORCE saat Anda melakukan SET: set (CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake prefix" FORCE)
Jav_Rock