Wydaje mi się, że zmienna CMAKE_GENERATOR
jest ustawiona zbyt późno, jeśli jest ustawiona w CMakeLists.txt
. Jeśli używasz (nawet na początku CMakeLists.txt
)
set(CMAKE_GENERATOR "Ninja")
message("generator is set to ${CMAKE_GENERATOR}")
można zobaczyć w czymś wyjścia jak
% 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
więc zmienna jest ustawiona tylko na samym końcu procedury generacji. Jeśli używasz coś podobnego
set(CMAKE_GENERATOR "Ninja" CACHE INTERNAL "" FORCE)
w CMakeLists.txt
, a następnie w pierwszym biegu cmake ../source
(bez -G
) używany jest domyślnygenerator. Zmienna CMAKE_GENERATOR
jest jednak przechowywana w pamięci podręcznej. Więc jeśli ponownie uruchomisz cmake ../source
, użyje on generatora określonego w zmiennej CMAKE_GENERATOR
w pamięci podręcznej.
To nie jest z pewnością najbardziej eleganckie rozwiązanie, choć ;-) Może wykorzystać plik wsadowy, który będzie faktycznie wykonać ten cmake -G generator
dla użytkownika ...
Ponieważ używam niestandardowe narzędzie łańcucha i mam VC++ zainstalowane, nie może powoływać się na CMake wybierając generator. Nie wiem też, co wybrać w wierszu poleceń, aby użytkownik mógł łatwo sklonować i zbudować projekt. – Ted
Ok ... Przepraszam, źle zrozumiałem twoje pytanie.W takim przypadku polecam umieszczenie CMakeCache.txt w katalogu, który jest w większości pusty, ale dla zmiennej CMAKE_GENERATOR. Lub możesz mieć ten plik pamięci podręcznej w repozytorium źródłowym i przekazać go przy użyciu opcji -C cmake. – Frank