Я настраиваю какой-то проект с помощью CMake. Мне нужно получить разделитель пути (например, /
или \
) в переменную CMake, чтобы что-то сделать, неважно, что именно. Как я могу это сделать?
Как получить системный разделитель путей с помощью CMake
Ответы (1)
Не существует переменной CMake для системного разделителя путей, которую можно было бы использовать напрямую.
Но, как прокомментировал @vre, используя команду file(TO_NATIVE_PATH)
, вы можете сделать:
file(TO_NATIVE_PATH "/" _separator)
message("The systems's path separator is '${_separator}'")
Если у вас есть полные пути, $<SHELL_PATH:...>
выражение генератора (версия CMake >= 3.4) очень полезна:
Содержимое
...
преобразовано в стиль пути оболочки. Например, косая черта преобразуется в обратную косую черту в оболочках Windows, а буквы дисков преобразуются в пути posix в оболочках MSYS....
должен быть абсолютным путем.
person
Florian
schedule
26.01.2018
Хм, вы уверены, что
TO_NATIVE_PATH
из /
приведет к разделителю путей на всех платформах? В частности, в Windows нет даже одного корня для файловой системы.
- person einpoklum; 26.01.2018
@einpoklum Я не был уверен, поэтому попробовал на Windows и Ununtu. Оба работают нормально. И если я посмотрю на рассматриваемый исходный код CMake, например
SystemTools::ConvertToWindowsOutputPath()
, он в основном конвертирует косые черты (в отличие от $<SHELL_PATH:...>
выражение генератора).
- person Florian; 27.01.2018
file(TO_CMAKE_PATH "${dir}" dir)
иfile(TO_NATIVE_PATH "${dir}" dir)
? - person vre   schedule 26.01.2018"${dir}"
изначально равен""
) приводит к чему-то интересному после преобразования? - person einpoklum   schedule 26.01.2018cmake_minimum_required (VERSION 2.8.12) project(a_test) file(TO_CMAKE_PATH "\\" path) message(STATUS "\\ converted to CMake path ${path}") file(TO_NATIVE_PATH "/" path) message(STATUS "/ converted to native path ${path}") file(TO_CMAKE_PATH "" path) message(STATUS "empty path converted to CMake path ${path}") file(TO_NATIVE_PATH "" path) message(STATUS "empty path converted to native path ${path}")
в Windows, и все работает, как и ожидалось. - person vre   schedule 27.01.2018