批处理自动生成makefile的大讨论
mingw吧
全部回复
仅看楼主
level 13
批处理编译快速,但是无法检查.o文件,这样大文件编译就浪费时间了.那么能不能自动生成makefile文件,然后设置临时环境变量运行make呢?这几天一直在研究这个问题.
在昨天v018版更新,突然脑洞大开,既然完成了
2018年01月07日 04点01分 1
level 13
二楼上效果图
2018年01月07日 04点01分 2
level 13
三楼上代码,因为刚刚测试成功,所以嘛你们懂的,还是比较简陋的:
echo off
::# 设置make工作目录临时环境变量。!!!在这里设置你
正确的
temppath=
set temppath=C:\npMingw64\mingw64\bin
set Path=%PATH%;%temppath%
::# 获得当前目录名称。
set project=%~dp0
set project=%project:~0,-1%
::# 使用源文件目录名作为输出exe文件名,去掉路径。
for %%i in ("%project%") do set project=%%~ni
set outname=%project%.exe
::# 删除之前的makefile.
if exist makefile del /f /q makefile
::# 生成makefile.
(
echo # Compile test for mingw64
echo # 百度mingw吧主千城真人. %DATE%
echo # 更多mingw编译知识请关注百度[mingw吧]
echo CC = gcc
echo include= -I%temppath%\..\include\sdl2
echo lib= -lwinmm -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lSDL2_net -lgdi32 -lole32 -loleaut32 -luuid -lwinmm -lmsimg32
echo flag= -Wall -g
echo #-mwindows -mconsole
echo src=%~nx1 %~nx2 %~nx3 %~nx4 %~nx5 %~nx6 %~nx7 %~nx8 %~nx9
echo=
::echo all:%~n1
echo all:^$^(src^)
echo ^$^(CC^) ^$^(flag^) ^$^(src^) ^$^(include^) ^$^(lib^) -o %~n1
echo.
) > makefile
::# 调用GNU make开始编译。
make -j5
cmd
2018年01月07日 04点01分 3
基本上只要设置一句临时变量路径就能拿来用了.用的时候把要编译的源码文件拖入.参看二楼图示
2018年01月07日 04点01分
level 5
2018年01月08日 08点01分 4
这是学渣之鄙视
2018年01月08日 09点01分
@千城真人✨ 这几天在期末考试,考完好好看这些![乖]
2018年01月08日 09点01分
@细雪斜风 我也要开始好好学C了。
2018年01月08日 09点01分
level 13
一转眼就大半年了,翻了翻把这贴子翻上来了。
2018年08月30日 11点08分 5
level 13
这半年来用了不少的开源库,在改用msys2后,体会到了msys2下安装和编译第三方库的方便。
特别是只用了几小时的时间学了一点点的pkg-config后,制作makefile和编译都有了很大方便。
前些日子把楼上的批处理小改了下:
@echo off
::# 设置make工作目录临时环境变量。不自动运行make不需要
::set temppath=C:\npMingw64\mingw\bin
::set Path=%temppath%;%Path%
::# 删除之前的makefile.
if exist makefile del /f /q makefile
::# 生成makefile.
(
echo # makefile简单生成
echo # %DATE%
echo # 更多mingw编译知识请关注百度[mingw吧]
echo CC = gcc
echo RM = del /f /q
echo=
echo include= -I.
echo lib= -L. -lwinmm -lmingw32 -lgdi32 -lole32 -loleaut32 -luuid -lwinmm -lmsimg32
echo=
echo #pkg_flags = ^$^(shell pkg-config --cflags --libs sdl2 SDL2_image SDL2_ttf SDL2_mixer^)
echo=
echo flag= -Wall -g -mwindows -mconsole
echo=
echo src=%*
echo=
::echo all:%~n1
echo all:
echo ^$^(CC^) ^$^(flag^) ^$^(src^) ^$^(include^) ^$^(lib^) -o "%~n1" ^$^(pkg_flags^)
echo clean:
echo ^$^(RM^) "%~n1.exe"
echo.
) > makefile
exit
::# 调用GNU make开始编译。
if exist makefile (
make
)else exit
2018年08月30日 11点08分 6
level 13
把要编译的源文件,可以是多个,直接拖放到批处理上,然后在生成的makefile中把被注释掉的#pkg_flags恢复就行了,根据使用的第三方库使用不同的名字就OK,上面例子中是sdl2的
下面是一个简单的helloworld拖放到批处理上生成的makefile
# makefile简单生成
# 2018/08/30 周四
# 更多mingw编译知识请关注百度[mingw吧]
CC = gcc
RM = del /f /q
include= -I.
lib= -L. -lwinmm -lmingw32 -lgdi32 -lole32 -loleaut32 -luuid -lwinmm -lmsimg32
#pkg_flags = $(shell pkg-config --cflags --libs sdl2 SDL2_image SDL2_ttf SDL2_mixer)
flag= -Wall -g -mwindows -mconsole
src=C:\Users\Administrator\Desktop\helloworld.c
all:
$(CC) $(flag) $(src) $(include) $(lib) -o "helloworld" $(pkg_flags)
clean:
$(RM) "helloworld.exe"
2018年08月30日 11点08分 7
通过make命令在makefile中使用$(shell pkg-config)是在cmd命令行中使用pkg-config的一个很好的方法
2018年08月30日 11点08分
1