Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > <projectname>.bat


Автор: Abyx 31.7.2010, 14:17
Иногда надо разместить на форуме небольшую программу, так чтобы другие участники могли ее скомпилировать и запустить.
Для этого обычно либо выкладывается только код, и предполагается что желающие сами создадут проект и добавят туда этот код,
либо прикрепляется архив с проектом (а также часто с кучей мусора типа .suo, .user, etc файлов).

Но есть другой способ: исходник можно объединить со скриптом компиляции, в одном .bat файле.

Пример для MSVC2010 (используется %VS100COMNTOOLS%)
Код

/* & @echo off & cls & rem !!! IT MUST BE FIRST LINE OF FILE !!!
set filename=ShowHTMLDialog
call "%VS100COMNTOOLS%vsvars32.bat"
copy %0 "%filename%.cpp
cl /Fe"%filename%.exe" %filename%.cpp kernel32.lib oleaut32.lib /link /SUBSYSTEM:WINDOWS
del %filename%.cpp
if not exist %filename%.exe goto :eof
del %filename%.obj
set /p ans=Run %filename%.exe? [y/n]^>
if "%ans%" == "y" start %filename%.exe
goto :eof
*/

// далее идет какой-то код....

#include <mshtmhst.h>
#pragma comment(lib, "urlmon.lib")

#pragma comment(linker, "/entry:main")
void main()
{
    static auto pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(LoadLibraryA("MSHTML.DLL"), "ShowHTMLDialog");
    IMoniker *pURLMoniker;
    auto bstrURL = SysAllocString(L"http://ya.ru");
    CreateURLMonikerEx(nullptr, bstrURL, &pURLMoniker, URL_MK_UNIFORM);
    if(pURLMoniker)
    {
        pfnShowHTMLDialog(nullptr, pURLMoniker, nullptr, L"help:no", nullptr);
        pURLMoniker->Release();
    }
    SysFreeString(bstrURL);
    ExitProcess(0); // kills threads created by MSHTML.DLL and ShowHTMLDialog()
}

Автор: djamshud 31.7.2010, 14:56
Это такая гениальная система сборки? Все давно уже изобретено: make, cmake, scons, etc.

Автор: Abyx 31.7.2010, 15:13
djamshud, это "система сборки" которая позволяет запихнуть все в 1 файл.
Собственно это ее основное преимущество - минимум телодвижений, чтобы скачать, собрать и запустить программу.
Предложите способ быстрее.

Автор: djamshud 31.7.2010, 15:40
Код

tar -xzf prog.tgz && cd prog && make

Разархивируем, переходим в каталог с исходниками, собираем.

Я в bat-скриптах полный ноль, но, как я понимаю, вашу "систему сборки" придется переписывать под каждый проект, правильно? А если в проекте несколько файлов? Про подкаталоги молчу:). И вообще в чем смысл создания каких-то там проектов для компиляции одного несчастного файла с исходником?

Нет, может быть это кому-нибудь и нужно, но лично мне идея кажется как минимум сомнительной, хотя, если честно, бредовой. Но на то оно и имхо:).

Автор: Abyx 31.7.2010, 15:48
djamshud, у меня винды, в них не работает
Код

tar -xzf prog.tgz && cd prog && make

что делать?

Цитата(djamshud @  31.7.2010,  16:40 Найти цитируемый пост)
вашу "систему сборки" придется переписывать под каждый проект, правильно? А если в проекте несколько файлов?

она рассчитана только на 1 файл. который можно запихнуть в тег [ code]
менять ничего не надо, разве что переменную filename

Цитата(djamshud @  31.7.2010,  16:40 Найти цитируемый пост)
И вообще в чем смысл создания каких-то там проектов для компиляции одного несчастного файла с исходником?

тем что каждый раз писать команды в консоль неудобно. много кнопок наживать надо

идея объединять .bat и сорцы не моя, я такое часто видел для масма

Автор: djamshud 31.7.2010, 16:12
Abyx, у меня линупс, ваш bat-скрипт тоже не работает:). Для винды мою строчку легко переделать, а например CMake можно настроить на компиляцию программы в различных операционках.

ЗЫ. А что, кто-то копирует с форума исходники и ради интереса их компилирует?..

Автор: Abyx 31.7.2010, 16:18
djamshud, у меня нет CMake. Есть только nmake, bjam и msbuild.

Автор: djamshud 31.7.2010, 17:16
Abyx, а у другого нет винды, у третьего вижуалстудиевского компилятора. О чем разговор то тогда? Сделали велосипед, чтобы копипастить на форумы исходники и самому же их компилировать? Ну... молодец, пирожок на полке слева.

Автор: boostcoder 31.7.2010, 22:39
Цитата(Abyx @  31.7.2010,  14:17 Найти цитируемый пост)
(SHOWHTMLDIALOGFN*)GetProcAddress(LoadLibraryA("MSHTML.DLL"), "ShowHTMLDialog");

на чем код написан? функции странные. что за либа?

Автор: Abyx 1.8.2010, 08:54
boostcoder, http://msdn.microsoft.com/en-us/library/aa741858%28VS.85%29.aspx

Автор: boostcoder 2.8.2010, 12:10
Цитата(Abyx @ 1.8.2010,  08:54)
boostcoder, http://msdn.microsoft.com/en-us/library/aa741858%28VS.85%29.aspx

ааа, это же вендоус.

Автор: HellStranger 4.8.2010, 14:05
Модератор: Сообщение скрыто.

Автор: boostcoder 4.8.2010, 14:25
а по поводу "смысла" поста: что тут ненормального? поинтересовался что человек использует за либу, с такими функциями. что удивительного?

Автор: bsa 4.8.2010, 14:32
Цитата(boostcoder @  4.8.2010,  15:25 Найти цитируемый пост)
что удивительного?

Просто человек, который хоть раз видел WinAPI, сразу поймет, что это WinAPI.  smile 

Автор: boostcoder 4.8.2010, 14:38
Цитата(bsa @  4.8.2010,  14:32 Найти цитируемый пост)
Просто человек, который хоть раз видел WinAPI, сразу поймет, что это WinAPI.

ну и? ну не видел я винапи, и что?

Автор: Abyx 4.8.2010, 14:54
Модератор: Сообщение скрыто.

Автор: HellStranger 4.8.2010, 15:32
Модератор: Сообщение скрыто.

Автор: boostcoder 4.8.2010, 15:52
Цитата(HellStranger @  4.8.2010,  15:32 Найти цитируемый пост)
твой опыт программирования вообще и под виндой в частности

не понимаю, какое отношение имеет макрисофтвендаус к программированию? я никогда не писал используя апи сей ос, и ничего, никогда не замечал в этом надобности. хз о чем вы..

Цитата(HellStranger @  4.8.2010,  15:32 Найти цитируемый пост)
В его адрес нормальные слова просто не печатаются.

да вы нормальных слов то не знаете. ощущение именно такое.

в 80% ваших постов, пустой троллинг, ругательства, упреки, самовосхваления и т.д..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)