Cách sử dụng CMAKE_INSTALL_PREFIX


97

Tôi muốn tạo Makefile với mục tiêu cài đặt, thực hiện cài đặt thành / usr thay vì mặc định / usr / local. Giả sử rằng thư mục xây dựng được thực hiện trong thư mục con nguồn, tôi thực thi:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txt chứa: CMAKE_INSTALL_PREFIX:PATH=/usr(OK?)

Bây giờ tôi thực hiện:

làm
thực hiện cài đặt

Tất cả các tệp vẫn được cài đặt cho usr / local. Chuyện gì thế?

Chỉnh sửa: Không có CMAKE_INSTALL_PREFIX trong bất kỳ tệp dự án CMakeLists.txt nào. Trước khi chạy cmake, tôi xóa mọi thứ khỏi thư mục đầu ra. cài đặt các chỉ thị trong CMakeLists.txt trông giống như sau:

install(TARGETS mylibrary DESTINATION lib)

Câu trả lời:



30

Có hai cách để sử dụng biến này:

  • chuyển nó như một đối số dòng lệnh giống như Job đã đề cập:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • gán giá trị cho nó trong CMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    Nhưng hãy nhớ đặt nó TRƯỚC PROJECT(< project_name>) lệnh, nếu không nó sẽ không hoạt động!


4
Thật kỳ lạ, câu lệnh SET () chỉ hoạt động với tôi nếu tôi đặt nó SAU câu lệnh PROJECT () (CMake 2.8).
AstroFloyd

2
Câu trả lời này và tham chiếu mà nó liên kết đến thảo luận trực tiếp hơn về vấn đề lệnh trước / sau dự án ().
Craig Scott

PROJECTLệnh này là gì và làm thế nào để có cmaketùy chọn này trước nó? Bạn sẽ có một ví dụ?
Stephane

6

Nhưng hãy nhớ đặt nó TRƯỚC lệnh PROJECT (<project_name>), nếu không nó sẽ không hoạt động!

Tuần đầu tiên tôi sử dụng cmake - sau một số năm sử dụng công cụ tự động GNU - vì vậy tôi vẫn đang học (tốt hơn là viết macro m4), nhưng tôi nghĩ rằng sửa đổi CMAKE_INSTALL_PREFIX sau khi thiết lập dự án là nơi tốt hơn.

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

Lần chạy đầu tiên (không có bộ nhớ 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

Lần chạy thứ hai

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

Cho em biet em co the lam duoc khong, em co the hoc duoc nhieu lam. Nó vui.


Cố gắng sử dụng FORCE khi bạn thực hiện SET: set (CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake prefix" FORCE)
Jav_Rock
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.