Estoy trabajando en un proyecto que consiste en varios ejecutables pequeños. Los ejecutables deben ejecutarse desde la terminal (o el símbolo del sistema) y pueden escribirse en cualquier lenguaje de programación. Aquellos escritos en idiomas interpretados tienen una línea shebang para sistemas unixy, mientras que su extensión de archivo se agrega a la variable de entorno PATHEXT en Windows.¿Cómo pelar extensiones de archivo con cmake (o cualquier otra herramienta de construcción portátil)?
Para hacer uso de los ejecutables consistentes a través de todos los lenguajes de programación y los dos principales grupos de plataformas, que necesito para despojar a la extensión de archivo de nombre de archivo de programas interpretados en los sistemas unixy. (Por "uso consistente" quiero decir: simplemente escriba el nombre del programa para iniciarlo, sin necesidad de especificar su extensión de archivo.)
Para ir más al concreto, supongo que escribo algo como el siguiente archivo CMakeLists:
project (Mixed Example)
add_executable (banana banana.cpp)
add_executable (grape grape.hs)
add_script? (orange orange.py)
add_script? (strawberry strawberry.lua)
install (TARGETS banana grape orange strawberry DESTINATION bin)
entonces quiero banana.cpp
y grape.hs
para ser compilado de la forma habitual, mientras que yo quiero las extensiones de archivo de orange.py
y strawberry.lua
a ser despojado de forma condicional, dependiendo de la plataforma. Por lo tanto, el directorio bin
debe contener los siguientes archivos en un sistema unixy:
banana grape orange strawberry
y la siguiente en Windows:
banana.exe grape.exe orange.py strawberry.lua
¿Cómo se hace eso?
¿existe también una manera de hacer esto en una nueva regla, por lo que no tiene que especificar el cambio de nombre manualmente para cada guión? Y lo más importante, ¿hay algún modo yo ahorrar el esfuerzo de definir el método de instalación para cada guión dos veces (es decir, una vez para UNIX y una vez para Win32)? – Julian
@Julian he añadido más información que muestra cómo se puede hacer esto. Gracias – Fraser
, que parece ser exactamente lo que estaba buscando! – Julian