以前学习C语言 c++ 都是使用 vc 6.0 ,后面的vs高版本也用过一下,但是发现同样代码高版本vs编译出来的程序,更新各种运行库,我就TM一个功能简单的小工具而已,vc60编译出来的基本放哪里都能直接跑。
然而这次jetbrain的pycharm,界面,各种功能确实很好用,很方便。我于是想尝试jetbrain的clion。
然后各种百度发现,比较常用的就是搭载编译工具 mingw-w64
x86_64+posix +seh 8.1版本
x86_64+win32+seh 8.1版本
下载链接
我找来了以前下载的瑞士军刀netcat 的源代码进行编译测试,发现根本不会用,跟vc6.0 或者vs那些差太远了,微软那套东西,编译流程已经弄得傻瓜化了,非常容易上手,换了别的,完全不适应,这个还要懂点编译原理,里面涉及了Makefile(这个在Linux环境编译方式安装软件经常看见),另外一个就是cmake以及它的配置文件cmakelists。 至于这些东西的具体解释可以度娘找到。
我现在clion + mingw-w64 这个环境就是属于后者cmake,也就是说要配置cmakelists.txt这个文件。
当然我第一次尝试的是直接用Makefile文件编译,因为netcat的源代码里面,就附有Makefile文件,里面的内容是这样了
cc=gcc
link=link
cflags=/nologo /ML /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "TELNET" /D "GAPING_SECURITY_HOLE" /YX /FD /c
lflags=kernel32.lib user32.lib wsock32.lib winmm.lib /nologo /subsystem:console /incremental:yes /machine:I386 /out:nc.exe
all: nc.exe
getopt.obj: getopt.c
$(cc) $(cflags) getopt.c
doexec.obj: doexec.c
$(cc) $(cflags) doexec.c
netcat.obj: netcat.c
$(cc) $(cflags) netcat.c
nc.exe: getopt.obj doexec.obj netcat.obj
$(link) getopt.obj doexec.obj netcat.obj $(lflags)
搞了半天,查了半天一直有都是不成功。
后来我认真去理解一下里面的代码,我发现这个执行编译程序竟然是cl 这么tm是vc60 的编译程序,而mingw-w64这边应该是gcc编译的。。。。。 所以我要用这个Makefile方式搞的话,还得研究cl 和gcc ,然后转换过来。于是我两个命令都是好好研究了一番,测试了一番,后面就果断放弃了。(再说个小插曲,我用这个Makefile直接用vc60的cl.exe 去编译 也是各种报错。。。。。。。。)
于是我就开始着手摸索cmakelists
各种查,各种度,于是皇天不负有心人。。。最终
cmake_minimum_required(VERSION 3.16)
project(ncproject C)
#INCLUDE_DIRECTORIES(D:/mingw64/x86_64-w64-mingw32/lib)
set(CMAKE_C_STANDARD 99)
set(CMAKE_BUILD_TYPE Release)
add_definitions(-DNDEBUG -DWIN32 -D_CONSOLE -DTELNET -DGAPING_SECURITY_HOLE)
aux_source_directory(. DIR_SRCS)
#target_link_libraries(
# ${CMAKE_CURRENT_SOURCE_DIR}/libs/)
set(LINK_LIBS libkernel32.a libuser32.a libwsock32.a libwinmm.a )
add_executable(ncproject ${DIR_SRCS})
target_link_libraries(ncproject ${LINK_LIBS})
可以编译netcat 成功的的cmakelists诞生了,感动得滴泪横流。。。。。。。。。。。。。。。
https://udomain.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z

被折叠的 条评论
为什么被折叠?



