Есть задача - компилировать проект в консоли Линукса, а потом с минимальными изменениями всё тоже самое скомпилировать в Visual Studio.
С исходными кодами на Си проблем не особо много, препроцессор штука мощная. А вот поддержание в адекватном состоянии make-файлов одновременно с *.vcproj это задача, рутинная, регулярно отнимающая много времени и не доставляющая удовольствия от процесса.
Решение нашлось достаточно быстро. Это Bakefile, кросс-платформенный генератор make -файлов для перекрестной компиляции.
2.
Наиболее простой способ создания make-файлов с использованием Bakefile заключается в использовании так называемых пресетов, которые позволяю описать стандартное поведение make-файлов буквально в двух словах.
Возьмем простой пример, программа, написанная на С и сохранена в файле hello.c
#include <stdio.h>Чтобы нам это скомпилировать, напишем небольшой файл hello.bkl (строки пронумерованы для того, чтобы потом на них ссылаться)
int main()
{
printf("Киса куку!\n");
return 0;
}
1 <?xml version="1.0"?>Формат файла в стиле xml. В строке 3 подключаем пресет. В строке 4 говорим что нас интересует исполняемый файл. В строке 5 объясняем где взять исходник. Всё!
2 <makefile>
3 <include file="presets/simple.bkl"/>
4 <exe id="hello" template="simple">
5 <sources>hello.c</sources>
6 </exe>
7 </makefile>
Просто, не правда ли?
3.
Создаем make-файлы.
$ bakefile -f msvc hello.bkl
Так мы получим makefile.vc для nmake
$ bakefile -f gnu hello.bkl
А так для GNU Make
$ bakefile -f msvs2005prj hello.bkl
Вот таким не хитрым способом получаем файл проекта для VS2005
Bakefile версии 0.2.2 позволяет создать make-файлы для 14-ти средств компиляции, используемых на различных платформах.
Bakefile активно развивается и используется во многих проектах.
Кто это использует: http://www.bakefile.org/wiki/BakefileUsers
Домашняя страница проекта: http://www.bakefile.org