Dường như với tôi rằng biến số CMAKE_GENERATOR
được đặt quá muộn nếu được đặt trong CMakeLists.txt
. Nếu bạn sử dụng (thậm chí vào đầu CMakeLists.txt
)
set(CMAKE_GENERATOR "Ninja")
message("generator is set to ${CMAKE_GENERATOR}")
bạn có thể nhìn thấy trong một cái gì đó ra như
% cmake ../source
-- The C compiler identification is GNU 4.9.2
...
-- Detecting CXX compile features - done
generator is set to Ninja
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/build
Vì vậy, các biến được chỉ đặt ở cuối của các thủ tục thế hệ. Nếu bạn sử dụng một cái gì đó giống như
set(CMAKE_GENERATOR "Ninja" CACHE INTERNAL "" FORCE)
trong CMakeLists.txt
, sau đó trong thời gian đầu tiên của cmake ../source
(không -G
) phát mặc định được sử dụng. Tuy nhiên, biến số CMAKE_GENERATOR
được lưu trong bộ nhớ cache. Vì vậy, nếu bạn chạy lại cmake ../source
sau đó, nó sẽ sử dụng trình tạo như được chỉ định trong biến số CMAKE_GENERATOR
trong bộ nhớ cache.
Đây chắc chắn không phải là giải pháp thanh lịch nhất, mặc dù ;-) Có thể sử dụng một tập tin batch để thực sự sẽ thực hiện cmake -G generator
cho người sử dụng ...
Nguồn
2015-04-23 09:34:42
Bởi vì tôi đang sử dụng một tùy chỉnh công cụ chuỗi, và tôi có VC++ cài đặt, tôi không thể dựa vào CMake lựa chọn một máy phát điện. Tôi cũng không chỉ định điều gì trên dòng lệnh để người dùng dễ dàng sao chép và xây dựng dự án. – Ted
Ok ... xin lỗi tôi đã hiểu nhầm câu hỏi của bạn.Trong trường hợp đó, tôi sẽ khuyên bạn nên đặt một CMakeCache.txt vào thư mục, mà chủ yếu là trống nhưng đối với biến CMAKE_GENERATOR. Hoặc bạn có thể có tệp bộ nhớ cache đó trong kho lưu trữ nguồn của bạn và chuyển nó cùng với tùy chọn -C cmake. – Frank