习惯了使用命令行,下面介绍Windows下配置命令行编译C++和C#代码,不用使用工具创建工程,解决方案这么笨重
一、Windows下使用cl.exe编译C++代码:
1.添加Path:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
2.添加INCLUDE:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\winrt
3.添加LIB:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\lib\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64
二、Windows下使用csc.exe编译C#代码:
添加Path: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn;
三、查看命令的使用帮助: 命令 + /?, 如:
“cl /?“、“csc /?”
编译C++代码记录:
cl test1.cpp /Fo:objs/test1.obj /Fe:outs/test1.exe
outs\test1.exe
编译C#代码记录:
csc /out:outs/test1.exe test1.cs
.\outs\test1.exe //在 Mac下编译C#同上,但运行时要借助 mono,格式如右: mono ./outs/test1.exe
//Mac下的 Mono安装使用参考Mono官网:https://www.mono-project.com/docs/about-mono/supported-platforms/macos/.
中文显示乱码:
chcp //查看当前系统编码
chcp 65001 //临时更改会话窗囗的编码
65001 UTF-8代码页
950 繁体中文
936 简体中文默认的GBK
437 MS-DOS美国英语
四、Windows cmd下的常用命令:
创建目录: md / mkdir XXX
删除目录:rd / rmdir XXXX
创建空文件 : type nul>Test.cs //此命令行也是在命令行中浏览文件内容
创建非空文件: echo [内容]>Test.txt
删除文件: del XXX.xxx
五. 命令行调用文件编辑工具打开源码(等文本)文件, 进行编辑:
前提:文本编辑工具已添加到系统环境变量;
使用:notepad Test.cs
notepad++ Test.cs //notepad++代码有高亮等颜色和缩进,更好看
===================================
CMake:
CMake简明教程 实例工程演示(含字幕): https://www.bilibili.com/video/BV1A7411f7jT?from=search&seid=7552495904821832198
OpenGL ES抖音分屏效果实现 : https://www.bilibili.com/video/BV1ka4y1W7uy?p=2
NDK Cmake交叉编译 : https://www.bilibili.com/video/BV1Fh41117K1?p=4
Android Studio CMake : https://developer.android.google.cn/studio/projects/configure-cmake
CMake的工程结构:
根目录下有CMakeLists.txt
子级目录下也有CMakeLists.txt
只要是工程目录就有CMakeLists.txt,且根目录下的CMakeLists.txt会包含子目录的CMakeLists.txt
添加子目录, 使用add_subdirectory(subfolder),实际上是添加subfolder下的CMakeLists.txt
可以嵌套添加,每个带有CMakeLists.txt的目录就是一个实例工程,外层的代表一个目录
需要引用另外的目录下的头文件:
include_directories(
${CMAKE_SOURCE_DIR}/samples/base64
)
样例1:设置(简单的)工程文件:
project(helloword)
set( src
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/lib.cpp
)
add_executable( helloword
${src}
)
#另外一种方式链接本项目下的静态库,即添加外部静态库
#link_directories(
# ${CMAKE_SOURCE_DIR}/build/samples/base64
#)
target_link_libraries(
linkage #最外层大项目下的子项目(静态库)
base64
# "base64" #它内部查找规则是查找libbase64.a (在前面加lib,且尾部加.a)
ws2_32 #这是编译器自带的库
)
##link多个库时顺序有关系的,所以在编译linkage时,它会先编译base64
##链接编译器自带的库时,不需要使用link_directories()命令 //编译器会自带添加
生成静/动态库:
set( src
${CMAKE_CURRENT_SOURCE_DIR}/base64.cpp
${CMAKE_CURRENT_SOURCE_DIR}/base64.h
....
)
add_library( base64 STATIC
${src}
)
add_library( base64_dynamic SHARED
${src}
)
生成动态库时,会生成两个库文件: 1个xxx.dll(动态库,大的)和1个 xxx.dll.a(动态库对应的静态库,很小的,其实是导入库), 链接时是链接到.a文件,运行的时候才加载.dll