我想要获取main方法所在的线程对象的名称,该怎么办呢? ...类就提供了一个很好玩的方法: public static Thread currentThread() 返回当前正在执行的线程对象 package cn.itcast_03; /* * 在不是...Thread类的子类中,如何获取线程对象的名称呢?...getName() */ public class MyThreadDemo { public static void main(String[] args) { // 我要获取...main方法所在的线程对象的名称,该怎么办呢?
但是对于生成lib、dll等稍复杂的项目,虽然可以借助task.json配置不同的task来实现,但使用g++中rcs等归档命令还是有些晦涩难懂,所以单纯的使用task.json文件来生成lib、dll...其中CMake插件更侧重于cmake脚本(如CMakeLists.txt文件)的编写体验,而CMake Tools插件则是一个功能更为全面的CMake集成开发环境(IDE)插件,它涵盖了脚本编写、项目的配置...无论是单文件、多文件、多文件夹项目,乃至是生成lib、dll库以及引用第三方库的项目,只要其CMakeLists.txt文件配置正确,那么对于VS Code来说,其运行和调试都是一样的,因此本节以同时生成库文件和其测试程序...exe为例,演示如何使用cmake插件来实现其运行和调试。...项目结构为如下: 其中add文件夹下用于生成库文件ADD.dll和ADD.lib,src文件夹下用于生成测试ADD库文件的可执行程序,因此,本项目存在三个CMakeLists.txt文件,分别是add文件夹下的
. ├── CMakeLists.txt └── main.cpp 那么该如何使用书写其CMakeLists文件呢,如下为一个简单的CMakeLists.txt示例: cmake_minimum_required...引用第三方库(静态库) 在实际开发中,往往需要依赖外部库。以静态库为例,考虑引入其他同事提供的库func.lib,其配套的头文件为func.h,同时,生成的动态库名称为BirdEngine。...引用第三方库(动态库+静态库) 针对于同时依赖静态库和动态库的场景,需要在链接阶段找到lib库,同时需要在运行阶段找到dll库。...假设某项目需要库BirdEngine,其静态库为BirdEngine.lib,动态库为BirdEngine.dll,其文件夹布局如下: . ├── CMakeLists.txt ├── third_party...同时,通过file命令复制动态库到输出目录。 总结 本文结合实际场景讲解CMakeLists.txt文件的组织,包括单文件、多文件、多文件夹项目构建,以及如何灵活地集成和管理第三方库。
SQLite是一个老牌的C库,不提供CMake的构建方式,而且它还是个可执行程序而不仅仅是库,这给程序的集成带来一定的麻烦。 那么如何在Windows下将SQLite构建成库文件呢?...另外,sqlite3.def是模块定义文件,为Windows的DLL模块定义各种属性和导出符号。如果是像笔者一样需要构建成动态库,那么这个文件一定要有。...") # cmake的最低版本要求 cmake_minimum_required (VERSION 3.10) # 工程名称、版本、语言 project(sqlite3 VERSION 3.4.6)...lib 目录 install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION lib # 对于共享库 ARCHIVE DESTINATION...lib # 对于静态库 RUNTIME DESTINATION bin # 对于可执行文件 ) 然后执行如下脚本指令: cmake $SourceLocalPath ` -
cmake得到的工程都有install工程,生成之后就会自动把需要的头文件、lib还有dll复制到对应的目录中去,这样方便我们管理。...最后,生成一次INSTALL项目,之前CMAKE_INSTALL_PREFIX设置的目录就会有相应的头文件、dll、lib以及依赖。...ENDIF 根据注释,PROJ_FLAGS是静态编译的时候才需要开启的,而刚才我们编译的Proj4编译的是动态库,所以不用管这个配置项目。...4) 自定义动态库名称(可跳过) #GDAL_DLL = gdal$(VERSION).dll !...ENDIF 根据这篇文章《自定义编译gdal库》,可以将生成DLL、lib根据是否debug模式改成不同的名称。尝试过多次,修改dll名称是可以的,修改lib名称存在问题。
项目 ; 2.选择项目类型 : 选择 CMake 项目类型 ; 3.输入项目名称 , 选择项目位置 , 解决方案命名使用系统自动生成的 , 点击 “创建” 按钮 , 创建新项目 ; 4.进入代码界面后...( .dll ) 文件处理 1.头文件和静态链接库 ( .lib ) 解压拷贝 ① 解压 ffmpeg-20190813-8cd96e1-win64-dev.zip 文件 , 如下 : ② 将其中的...lib 和 include 目录整体拷贝到 CMake 项目的源码目录下 ; 2.动态链接库 ( .dll ) 解压拷贝 ① 将 ffmpeg-20190813-8cd96e1-win64-shared.zip...要配置的文件 : 此处要配置的 CMake 配置文件是源码路径下的 CMakeList.txt 配置文件 , 不是项目根目录下的配置文件 ; 2.配置头文件目录 : 之前拷贝的 include 目录到源码目录下...: 这里也配置相对路径 “lib” ; #配置库文件目录 : 设置 lib 库文件查找目录 , 相当于 Java 中的 jar 包 link_directories("lib") 4.配置 8 个 FFMPEG
CMake 本质上是一个 编译工具,其最终目的是方便地生成可执行文件或共享库。编译的过程和项目的配置,由 CMakeLists.txt 文件负责定义。...链接库的构建与集成 Android 的朋友应该对 so 动态链接库并不陌生,windows 的朋友对 dll 动态链接库也不陌生。其实两者本质上是类似的,只是在不同平台构建的产物不同罢了。...target_link_libraries: 对库进行链接,注意名称,这里的库名是 libfacer.so ,指定的名称是 facer 。...而不是感觉这些都是魔法,就像我第一次接触时,就不由感慨。 ---- 接下来我们将刚才编译的 libfacer.so 在这里集成一下做个小结。...中可以通过 readelf -h 查看动态链接库的信息: ---- 那么现在问题来了,我们该如何获取各个架构的 so 呢?
}/bin) 1.4 设置编译类型 # 编译静态库 add_library(库名称 STATIC 代码文件名称) # 编译动态库 add_library(库名称 SHARED 代码文件名称) #...( lib1.a lib2.a ) 1.11 链接动态库 target_link_libraries(所需生成的文件名称 所需链接的动态库名称) 例如: target_link_libraries...之后 (2) link_libraries用来链接静态库,target_link_libraries用来链接导入库,即按照header file + .lib + .dll方式隐式调用动态库的.lib库...add_library(common SHARED util.cpp) # 生成动态库或共享库 加入一句: set_target_properties(${第三方库项目名称} PROPERTIES FOLDER...(common SHARED util.cpp) # 生成动态库或共享库 放在 target_link_libraries() 之前。
—–高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了—–CMake!.../configure –prefix=/usr 如何安装HelloWord 使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态库、静态库以及文件、目录、脚本等 使用CMAKE...2,安装头文件与共享库。 静态库和动态库的区别 静态库的扩展名一般为“.a”或“.lib”;动态库的扩展名一般为“.so”或“.dll”。...安装共享库和头文件 本例中我们将 hello 的共享库安装到/lib目录, 将 hello.h 安装到/include/hello 目录 //文件放到该目录下 INSTALL(FILES hello.h...CMAKE_INCLUDE_PATH 和 CMAKE_LIBRARY_PATH 注意:这两个是环境变量而不是 cmake 变量,可以在linux的bash中进行设置 我们上面例子中使用了绝对路径INCLUDE_DIRECTORIES
俗称.so文件(姑且就以linux系统为例,在windows中称为dll,在mac中为的dylib),在平时的使用中我们对其察觉可能并不是很深,但其实我们玩电脑的时候无时不刻在使用动态链接库。...借用《深入理解计算机系统第3版》中的话来说: 共享库是一个目标模块,在运行或加载时,可以加载到任意的内存地址,并和一个在内存中的程序链接起来。...注意:阅读此文建议对动态链接库有一定的了解和使用经验,本文不是对动态链接库的介绍,有兴趣或者想深入动态链接库细节的可以参阅《深入理解计算机原理》这本书(文末有分享链接)。...),而-I(大写i)是指定头文件的路径: 将需要的.cpp直接编译成动态链接库A.so即可。...隐式链接 一种叫load time dynamic linking,就是说你的代码里面已经直接调用了库里面的函数,那么在link的时候会把该库的一小段lib link进去(而Linux上直接链接.so
如果我们把主进程和子进程分离到两个Bundle,主进程所在Bundle获取某些系统权限,而渲染进程获取某些必要权限,就能做到主进程和子进程权限分离的目的,为安全性提供了一定保证。...库链接 libcef_dll_wrapper # 该变量来自cef_variables.cmake中定义的配置 # 主要是针对不同的平台,链接对应平台的一些标准库...例如,在Windows下我们可能需要gdi32.lib,在Linux构建窗体可能需要X11库,以及在macOS下需要Cocoa、AppKit等框架库。...set(CEF_APP_HELPER_OUTPUT_NAME "cef_app Helper") # 注意,上述的名称都不是最终名称,它们更准确的意义是作为下面循环定义target的基础名称 # 后续循环的时候..."cef_app Helper") # 注意,上述的名称都不是最终名称,它们更准确的意义是作为下面循环定义target的基础名称 # 后续循环的时候,会基于上述名称进行拼接 首先,我们会定义helper
CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(...native-lib #设置库的名称。...log-lib # 设置path变量的名称。...# 指定NDK库的名称 你想让CMake来定位。...target_link_libraries 指令 target_link_libraries 指令用来为 target 添加需要链接的共享库,同样也可以用于为自己编写的共享库添加共享库链接。
,所以如果你还不是特别清楚,建议先从笔者这一篇文章了解下《C与CPP常见编译工具链与构建系统简介 - 知乎 (zhihu.com)》。...第一个必填参数name,就是我们要编译的库文件target的名称; 参数STATIC、SHARED、MODULE互斥三选一。...这个两个全局作用的指令的背景在于CMake是支持多target模块构建的,可以通过项目顶层的CMakeLists.txt中配置这两个指令,让子模块target共享这些头文件和库文件路径配置。...BUILD EXAMPLES 这一部分主要介绍了如何构建libcef_dll_wrapper以及demo。...ADD_LOGICAL_TARGET("cef_sandbox_lib" "${CEF_SANDBOX_LIB_DEBUG}" "${CEF_SANDBOX_LIB_RELEASE}") endif()
库的基本名称是message,而不是目标名称message-shared:在构建时将生成libmessage.so.1。...静态库上的额外目标属性如下: ARCHIVE_OUTPUT_NAME "message":这将确保库文件的名称只是 message,而不是 message-static。...为什么我们选择这种方法而不是在第 3 个菜谱中展示的使用OBJECT库的方法,即“构建和链接静态和共享库”,在第一章“从简单的可执行文件到库”中?OBJECT库负责编译库的第一步:从源代码到对象文件。...我们使用名称_build_dir而不是简单的build的原因是,在测试本地安装时,您的项目可能已经包含一个build目录,这会与新安装发生冲突。...这也是我们使用lib作为安装目标DESTINATION而不是CMAKE_INSTALL_LIBDIR的原因,否则可能会让account/__init__.py感到困惑。
输出日志选项LOG_BUILD和LOG_INSTALL指示ExternalProject_Add为构建和安装操作编写日志文件,而不是输出到屏幕。...我们将使用FetchContent或ExternalProject_Add在配置时下载所有必需的 Google Test 源码,并且在本菜谱中只关注在配置时获取依赖,而不是实际的源码及其单元测试。...) project(recipe-01 LANGUAGES Fortran C) 我们指示 CMake 在构建目录的lib子目录下保存静态和共享库。...每个编译器在生成机器代码时都会执行名称重整,不幸的是,这项操作的约定并不是通用的,而是依赖于编译器。...这可以通过使用add_library的MODULE选项并阻止在我们的库目标名称中添加任何前缀(例如,Unix 系统上的lib)来实现。
编译好的文件,包括支持的各种硬件等信息,有点类似于build.gradle文件明确Gradle如何编译APP; cpp文件夹:存放C/C++代码文件,native-lib.cpp文件默认生成的; CMakeLists.txt...:cmake脚本配置文件,cmake会根据该脚本文件中的指令去编译相关的C/C++源文件,并将编译后产物生成共享库或静态块,然后Gradle将其打包到APK中。... # 生成函数库的名称,即libnative-lib.so或libnative-lib.a(lib和.so/.a默认缺省) JNILearning #生成库类型... # 设置path变量的名称,这里为NDK中的日志库 log-lib #指定cmake查询库的名称 #即在ndk开发包中查询liblog.so...按照构建脚本中的命令将 C++ 源文件 native-lib.cpp 编译到共享的对象库中,并命名为 libnative-lib.so,Gradle 随后会将其打包到 APK 中; 运行时,应用的 MainActivity
/usr/local/ffmpeg 目录下;编译的库是动态库,在 Windows 下就是 DLL 库;编译时不生成 ffprobe 程序。...lib 目录,并将 SDL2.lib 和 SDL2.dll 文件拷贝到 lib 目录下。...sdl2.pc 中的内容,将其中的库路径修改为指定的输出路径 2、编译 x264 x264 库的编译还是比较简单的,与 SDL 一样我们也要先获取其源码,可以通过下面的命令获取 x264 源码:...要特别强调的一点是,我们需要将 lib 目录下的 libx264.dll.lib 文件名修改为 libx264.lib,否则 ffmpeg 编译时会报 “无法找到该库” 的错误。...我们需要在指定输出目录下创建 lib 目录,并将 fdk-aac.lib 和 fdk-aac.dll 文件拷贝到 lib 目录下。
设置项目名称 project(demo) 这个命令不是强制性的,但最好都加上。...(common SHARED util.cpp) # 生成动态库或共享库 add_library 默认生成是静态库,通过以上命令生成文件名字, 在 Linux 下是: demo libcommon.a...libcommon.so 在 Windows 下是: demo.exe common.lib common.dll 4....下,系统会根据链接库目录,搜索xxx.lib 文件,Linux 下会搜索 xxx.so 或者 xxx.a 文件,如果都存在会优先链接动态库(so 后缀)。...:cmake 补丁等级,比如 3.4.1 中的 1 CMAKE_SYSTEM:系统名称,比如 Linux-2.6.22 CMAKE_SYSTEM_NAME:不包含版本的系统名,比如 Linux
(x86)\GnuWin32\bin 因为这些如果存在,cmake出来的一定还是vc版本 2、安装cygwin 参考文章 如何在Windows中编译Linux Unix的代码(采用cygwin) 这里有几个错误..., 2.1、设置163镜像的地址不对,应该是:http://mirrors.163.com/cygwin/ 2.2、库名称有点问题 Devel 选项下的gcc-core,gcc-g++,make 以及...Lib选项卡下的libglib2,libglib2-devel 2.3 另外需要安装的库 增加安装cmake 3、下载编译hera 启动cygwin,执行 cd /cygdrive/d/temp/ git.../lib/loader/loader.c . 4.3、修改example.c /* EVMC: Ethereum Client-VM Connector API..../build/src/cyghera.dll libhera.dll 4.6、执行 .