Me gustaría utilizar make para conseguir una fabricación modular en combinación con continuous integration, prueba de la unidad automática y construye multiplataforma. Configuraciones similares son comunes en Java y .NET, pero me está costando armar esto para make y C/C++. ¿Cómo puede lograrse?makefile perfecto
Mis requisitos:
- acumulación rápida; no recursivo make (pregunta desbordamiento de pila What is your experience with non-recursive make?)
- sistema modular (es decir, dependencias mínimas, makefile en el subdirectorio con los componentes)
- multiplataforma (típicamente PC para la unidad de pruebas, objetivo incorporado para sistema de integración/release)
- completa comprobación de dependencia
- capacidad para realizar pruebas de unidad (automático) (ingeniería Agile)
- gancho en el sistema de integración continua
- fácil de usar
He comenzado con non-rec make. Todavía me parece un gran lugar para comenzar.
Limitaciones hasta ahora:
- hay integración de la unidad de prueba
- de incompatibilidad de las ventanas compiladores ARM base con las rutas de Cygwin
- incompatibilidad de makefile con Windows \ caminos
- hacia adelante dependencias
Mi estructura se parece a:
project_root /algorithm /src /algo1.c /algo2.c /unit_test /algo1_test.c /algo2_test.c /out algo1_test.exe algo1_test.xml algo2_test.exe algo2_test.xml headers.h /embunit /harnass makefile Rules.top
Me gustaría mantener las cosas simples; aquí las pruebas unitarias (algo1_test.exe) dependen tanto del componente 'algoritmo' (ok) como del marco de prueba de la unidad (que puede o no conocerse en el momento de compilar esto). Sin embargo, mover las reglas de compilación a la marca superior no me atrae, ya que esto distribuiría el conocimiento local de los componentes en todo el sistema.
En cuanto a las rutas de Cygwin: Estoy trabajando en hacer la compilación utilizando rutas relativas. Esto resuelve el problema /cygdrive/c
(como los compiladores generalmente pueden manejar/rutas) sin incluir C: (que no le gusta). ¿Alguna otra idea?
Tenga en cuenta que puede usar '/' como separador de ruta en Windows por lo general muy bien. Casi todas las funciones de API que utilizan rutas las traducen a '' 'de todos modos. – Joey
De hecho. Sin embargo, es la letra de la unidad lo que causa problemas. Make no maneja el: bien (como define un objetivo). Y que/cygdrive/c/no es reconocido por las aplicaciones de Windows. Si traduzco/cygdrive/c a c:/entonces el archivo de dependencia no reconoce el archivo de dependencia generado por el compilador. – Adriaan