linux - mac - musicbrainz picard español
Detectar plataforma/sabor subyacente en Cmake (5)
No. A partir de 2015, parece que CMake aún no puede decirle si se está ejecutando en Ubuntu.
CMake nos ha dado un lenguaje estándar para escribir especificaciones de compilación específicas de la plataforma de procedimientos basura, pero en mi opinión ha fallado en todos sus objetivos más allá de eso. Ni siquiera se puede empaquetar adecuadamente para Ubuntu; algunos mantenedores pobres aparentemente están haciendo eso a mano.
¿Alguien sabe alguna variable cmake o gancho o algo que pueda darme nombre de plataforma / nombre de sabor subyacente en el que se está ejecutando? por ejemplo, Linux-CentOs Linux-Ubuntu Linux-SLES
Sé que cmake tiene la variable "CMAKE_SYSTEM", pero eso no ayuda a diferenciar los sabores de Linux por ejemplo. Se agradece cualquier ayuda.
editar: ¿Acabo de leer que se puede hacer usando el comando lsb_release?
Probablemente, usted mismo tiene que escribir esa prueba. Este es uno de los ejemplos posibles, solo en Google: https://htcondor-wiki.cs.wisc.edu/index.cgi/fileview?f=build/cmake/FindLinuxPlatform.cmake&v=4592599fecc08e5588c4244e2b0ceb7d32363a56
Sin embargo, dependiendo de sus necesidades reales, la prueba puede ser bastante compleja. Por ejemplo, Ubuntu como sistema operativo basado en Debian siempre tiene /etc/debian_version
y muchos sistemas operativos basados en RPM tradicionalmente tienen /etc/redhat-release
. Hay un archivo /etc/os-release
en la especificación Linux Standard Base (LSB), pero por ejemplo en el host local este archivo está vacío por un motivo desconocido :)
en mi máquina
CMAKE_SYSTEM_INFO_FILE == "Platform/Linux"
CMAKE_SYSTEM_NAME == "Linux"
CMAKE_SYSTEM == "Linux-<kernel version>"
obtenida con cmake --system-information
, conozco personas que usan dichas macros en sus propios archivos CMakeLists.txt
para que funcionen como se esperaba, probablemente CMAKE_SYSTEM_NAME
es lo que realmente quieres, pero aquí tienes, obtienes este 3 y el comando para inspeccione las propiedades de su máquina en lo que respecta a cmake
.
Un poco menos intrincado que consultar archivos en el sistema de archivos es deducir lo mejor que pueda de los sistemas de archivos CMAKE_SYSTEM disponibles. Por ejemplo, un archivo CMakeLists.txt que contiene líneas como esta:
message("-- CMAKE_SYSTEM_INFO_FILE: ${CMAKE_SYSTEM_INFO_FILE}")
message("-- CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
message("-- CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
message("-- CMAKE_SYSTEM: ${CMAKE_SYSTEM}")
string (REGEX MATCH "//.el[1-9]" os_version_suffix ${CMAKE_SYSTEM})
message("-- os_version_suffix: ${os_version_suffix}")
cmake .
esto cuando ejecuté cmake .
:
-- CMAKE_SYSTEM_INFO_FILE: Platform/Linux
-- CMAKE_SYSTEM_NAME: Linux
-- CMAKE_SYSTEM_PROCESSOR: x86_64
-- CMAKE_SYSTEM: Linux-2.6.32-573.7.1.el6.x86_64
-- os_version_suffix: .el6
Y para mi situación, el .el6
fue suficiente para diferenciar.
El siguiente fragmento rellena la variable LSB_RELEASE_ID_SHORT
LSB_RELEASE_ID_SHORT con información sobre el sistema Linux subyacente:
find_program(LSB_RELEASE lsb_release)
execute_process(COMMAND ${LSB_RELEASE} -is
OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
En Ubuntu, por ejemplo, produce Ubuntu
.