วิธีใช้ CMAKE_INSTALL_PREFIX


100

ฉันต้องการสร้าง Makefile ด้วยเป้าหมายการติดตั้งทำให้การติดตั้งเป็น / usr แทนค่าเริ่มต้น / usr / local สมมติว่าสร้างไดเร็กทอรีในไดเร็กทอรีย่อยต้นทางฉันดำเนินการ:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txt ประกอบด้วย: CMAKE_INSTALL_PREFIX:PATH=/usr(ตกลง?)

ตอนนี้ฉันดำเนินการ:

ทำ
ทำการติดตั้ง

ไฟล์ทั้งหมดยังคงติดตั้งไว้ใน usr / local เกิดอะไรขึ้น?

แก้ไข: ไม่มี CMAKE_INSTALL_PREFIX ในไฟล์โปรเจ็กต์ CMakeLists.txt ใด ๆ ก่อนที่จะเรียกใช้ cmake ฉันลบทุกอย่างออกจากไดเรกทอรีผลลัพธ์ ติดตั้งคำสั่งใน CMakeLists.txt มีลักษณะดังนี้:

install(TARGETS mylibrary DESTINATION lib)

คำตอบ:



31

มีสองวิธีในการใช้ตัวแปรนี้:

  • ส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่งเช่นเดียวกับที่ Job กล่าวถึง:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • กำหนดมูลค่าให้ในCMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    แต่อย่าลืมวางไว้ก่อน PROJECT(< project_name>)คำสั่งมิฉะนั้นจะไม่ทำงาน!


4
แปลกคำสั่ง SET () ใช้ได้กับฉันก็ต่อเมื่อฉันวางไว้หลังคำสั่ง PROJECT () (CMake 2.8)
AstroFloyd

2
คำตอบนี้และการอ้างอิงเชื่อมโยงไปยังเพิ่มเติมโดยตรงกล่าวถึงปัญหาคำสั่ง before / after the project ()
Craig Scott

PROJECTคำสั่งนี้คืออะไรและจะมีcmakeตัวเลือกนี้มาก่อนได้อย่างไร คุณจะมีตัวอย่าง?
Stephane

7

แต่อย่าลืมวางไว้ก่อนคำสั่ง PROJECT (<project_name>) มิฉะนั้นจะไม่ทำงาน!

สัปดาห์แรกของฉันในการใช้ cmake - หลังจากใช้งานเครื่องมืออัตโนมัติ GNU มาหลายปี - ดังนั้นฉันจึงยังคงเรียนรู้ (ดีกว่าการเขียนมาโคร m4) แต่ฉันคิดว่าการแก้ไข CMAKE_INSTALL_PREFIX หลังจากตั้งค่าโครงการเป็นสถานที่ที่ดีกว่า

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

เรียกใช้ครั้งแรก (ไม่มีแคช)

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

วิ่งครั้งที่สอง

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

แจ้งให้เราทราบหากฉันเข้าใจผิดฉันมีเรื่องเรียนรู้มากมายที่ต้องทำ มันสนุก.


1
พยายามใช้ FORCE เมื่อคุณทำการ SET: set (CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake prefix" FORCE)
Jav_Rock
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.