Я не знаю ни одной переменной, которая предоставляет эту информацию, но вы можете создать его самостоятельно (с некоторыми оговорками).
Любые -D
аргументы, передаваемые в CMake добавляются в кэш-файл CMakeCache.txt
в директории сборки и повторно при последующих вызовах без необходимости указания в командной строке снова.
Таким образом, в вашем примере, если вы первый выполнить CMake, как
cmake ../.. -DCMAKE_INSTALL_PREFIX:PATH=/usr
тогда вы будете считают, что в дальнейшем работает просто
cmake .
все еще будет иметь CMAKE_INSTALL_PREFIX
набор для /usr
Если то, что вы ищете из CMAKE_ARGS
является полный список переменных, заданных в командной строке из каждого вызова CMake то следующий должен сделать трюк:
get_cmake_property(CACHE_VARS CACHE_VARIABLES)
foreach(CACHE_VAR ${CACHE_VARS})
get_property(CACHE_VAR_HELPSTRING CACHE ${CACHE_VAR} PROPERTY HELPSTRING)
if(CACHE_VAR_HELPSTRING STREQUAL "No help, variable specified on the command line.")
get_property(CACHE_VAR_TYPE CACHE ${CACHE_VAR} PROPERTY TYPE)
if(CACHE_VAR_TYPE STREQUAL "UNINITIALIZED")
set(CACHE_VAR_TYPE)
else()
set(CACHE_VAR_TYPE :${CACHE_VAR_TYPE})
endif()
set(CMAKE_ARGS "${CMAKE_ARGS} -D${CACHE_VAR}${CACHE_VAR_TYPE}=\"${${CACHE_VAR}}\"")
endif()
endforeach()
message("CMAKE_ARGS: ${CMAKE_ARGS}")
Это немного хрупкими, как это зависит от того, что каждая переменная, которая имеет быть en, установленный через командную строку, содержит фразу «Без справки, переменная, указанная в командной строке», указанная как ее свойство HELPSTRING
. Если CMake изменит это значение по умолчанию HELPSTRING
, вам придется обновить заявление if
соответственно.
Если это не то, что вы хотите CMAKE_ARGS
, чтобы показать, но вместо этого только аргументы из текущего исполнения, то я не думаю, что есть способ сделать это короткий взлома исходного кода CMake в! Однако я ожидаю, что это не то, что вы хотите, поскольку все предыдущие аргументы командной строки эффективно повторно применяются каждый раз.
Это работало некоторое время, но затем оно перестало работать. Я знаю, что это кажется очень странным, но я буквально копировал/вставлял вышеупомянутый скрипт, и это сработало. А потом он перестает работать, без каких-либо изменений в скрипте. Возможно, я схожу с ума, но это возвращает воспоминания о файлах «bat» и их непоследовательном поведении ... – Samaursa
Подумал, почему. Для будущих SOers это не будет работать с переменными CMake. – Samaursa