2014-10-01 15 views
5

Tôi đang bối rối về biến cache CMake của:Confused về ưu tiên thiết lập biến cache CMake của

  • Trường hợp 1: CACHE + FORCE

    set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "" FORCE) 
    
    • Đầu tiên CMake chạy:"myflags" xuất hiện trong tệp CMakeCache.txt như dự định.
    • Tùy chọn dòng lệnh: tùy chọn dòng lệnh không ghi đè "myflags" - có vẻ như FORCE có mức độ ưu tiên cao hơn dòng lệnh -D...="..." đối số. Điều này không được mong muốn - Tôi muốn đối số dòng lệnh ghi đè "myflags".

  • Trường hợp 2: chỉ CACHE

    set(CMAKE_CXX_FLAGS "myflags" CACHE STRING "") 
    
    • Đầu tiên CMake chạy: gì xuất hiện trong các tập tin CMakeCache.txt. Tôi muốn "myflags" xuất hiện cho lần chạy đầu tiên.
    • Tùy chọn dòng lệnh: dòng lệnh có mức độ ưu tiên trên "myflags".

Tôi thích hợp về kết luận của tôi? Hoặc làm "biến mặc định" chẳng hạn như CMAKE_CXX_FLAGS hoạt động khác nhau?

Có cách nào để có "myflags" viết trong file CMakeCache.txt trong thời gian chạy CMake đầu tiên (khi CMake không chạy trước đó trong thư mục này)?

Tôi muốn đặt "myflags" trong lần chạy CMake đầu tiên trong bộ nhớ cache, sau đó cho phép người dùng ghi đè bằng cách sử dụng dòng lệnh.

Nếu tôi sử dụng FORCE, người dùng không thể ghi đè thông qua dòng lệnh.

Nếu tôi không sử dụng FORCE, "myflags" không được ghi trong tệp bộ nhớ cache trong lần chạy đầu tiên.

Trả lời

11

này phù hợp với hành vi được giải thích trong documentation:

Thông thường, thiết lập (... CACHE ...) tạo ra các biến bộ nhớ cache, nhưng không thay đổi chúng. Nếu FORCE được chỉ định, giá trị của biến bộ nhớ cache được đặt, ngay cả khi biến đã có trong bộ nhớ cache. Điều này thường nên tránh, vì nó sẽ xóa mọi thay đổi đối với giá trị của biến bộ nhớ cache của người dùng.

CMAKE_CXX_FLAGS có mặt trong bộ nhớ cache ngay cả khi không set(CMAKE_CXX_FLAGS ... CACHE ...) trong CMakeLists.txt của bạn, bởi vì CMAKE_CXX_FLAGS biến đã được thiết lập trong quá trình biên dịch cờ khởi tạo.

+0

Cảm ơn bạn đã làm rõ. Giờ thì tôi đã hiểu. Một điều nữa: làm thế nào bạn sẽ đề nghị tôi thực hiện hành vi mà tôi mong muốn? (Điền 'CMAKE_CXX_FLAGS' vào lần chạy đầu tiên, sau đó cho phép người dùng ghi đè lên.) Tôi có nên kiểm tra xem biến có trống không và điền vào trường hợp đó? –

+3

Điều gì về việc sử dụng biến số khác nhau cho cờ CXX tùy chỉnh (ví dụ: 'MYFLAGS') và hợp nhất nó SET (CMAKE_CXX_FLAGS" $ {CMAKE_CXX_FLAGS} $ {MYFLAGS} "'? – Peter

+0

Có vẻ như nó hoạt động. –

Các vấn đề liên quan