tag picard musicbrainz mac kid3 español editar easytag linux cmake platform

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 .