Estoy trabajando en un conjunto relativamente grande de bibliotecas de código C de código de serie, que luego serán paralelizadas en CUDA por mis colaboradores.¿Cómo puedo hacer que mi proyecto altamente modular sea fácil de compilar para los usuarios finales?
Para este proyecto mi código esencialmente se reduce a
#include "Initialize.cpp"
#include "PerformMoves.cpp"
#include "CollectResults.cpp"
main()
{
//DECLARE General Vars
Initialize();
for (unsigned int step=0; step < maxStep; step++)
{
PerformMoves();
}
CollectResults();
}
Ahora los pasos que realizo dentro de inicializar y PerformMoves serán muy diferentes dependiendo de qué tipo de simulación que estoy construyendo. La velocidad es el máximo rendimiento ya que mi código es una simulación de Monte Carlo que realizará millones de movimientos, cada uno de los cuales implica potencialmente miles de cálculos. Por lo tanto, quiero evitar cualquier condicionales innecesarios.
Por lo tanto, esencialmente quiero diferentes módulos "plug and play" C, p.
InitializeSimType1.cpp InitializeSimType2.cpp InitializeSimType3.cpp
PerformMovesType1.cpp PerformMovesType2.cpp PerformMovesType3.cpp
....
cada uno optimizado para una cierto tipo de procedimiento de simulación, sin la "pelusa" de grandes condicionales para manejar una variedad de cas es.
Actualmente tengo dos tipos diferentes de simulaciones, y sólo tienen estos en dos carpetas diferentes y compilar la siguiente manera:
g ++ Main.cc Initialize.cpp PerformMoves.cpp CollectResults.cpp -O MC_Prog
Me gustaría pasar a algún tipo de esquema de compilación condicional, donde tengo un archivo de configuración de tipo donde especifico opciones y toma los archivos cpp correctos y los compila.
Supongo que un makefile + config files es mi mejor opción, pero más allá de los objetivos básicos y la compilación muy lineal, soy bastante novato en el mundo de los makefiles complejos.
¿Cuáles son algunas buenas formas en que podría crear un sistema de compilación basado en listas, que permitiría a los usuarios con conocimientos básicos de C crear fácilmente un objetivo con los módulos que desean? Mis usuarios finales no tendrán una gran cantidad de conocimiento de archivos (o conocimientos de programación en general), por lo que un sistema complejo en su extremo está fuera de cuestión. Quiero que básicamente tengan un sistema transparente de archivos de configuración que les permita elegir un módulo Initialize, un módulo PerformMoves y un módulo CollectResults. Una vez que hayan modificado este archivo de configuración con sus selecciones, quiero que puedan hacer una compilación de un solo comando.
En otras palabras, quiero ser capaz de crear un README que dirige a los usuarios:
- de entrada estas entradas en este archivo de configuración (da el nombre del archivo de configuración, opciones para poner para cada entrada del archivo de configuración). ..
- Compilar utilizando este comando (da mando único)
Sé que esto es una pregunta bastante abstracto y complejo, pero sé que hay algunos expertos/c Makefile por ahí que me podía ofrecer una buena orientación.
Bueno para uno Usted no debe usar tantas capitales en sus instrucciones. – Hello71
En mi código actual, sigo la convención de nomenclatura de MSDN sugerida por Microsoft, que es (la última vez que lo comprobé) que tapa la primera letra de todas las palabras dentro de vars. El código anterior simplemente hice tapping muy rápido para dar una idea aproximada de lo que estaba tratando de hacer. Entiendo que hay muchas ideas diferentes sobre la carcasa variable, pero calculé que MSFT era una autoridad bastante buena, así que simplemente sigan con sus sugerencias. ¿Es una mala idea? –
Siempre parece ser mejor utilizar guiones bajos para editar y dinking con código. MS es, después de todo, la compañía que creó la notación húngara. –