#include <stdio.h>
#include "factorial/factorial.h"
#include "fibonacci/fibonacci.h"
int main(){
printf("Factorial(4): %d\n", Factorial(4));
printf("Fibonacci(8): %d\n", Fibonacci(8));
return 0;
编译的具体过程如下:
1)准备工作, 创建子工程 factorial 和 fibonacci。
2)为了将 factorial 编译为静态链接库,修改 factorial 目录下的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.17)
project(factorial C)
set(CMAKE_C_STANDARD 11)
# 将 factorial.c 编译为静态链接库
add_library(factorial STATIC factorial.c)
3)为了将 fibonacci 编译为动态链接库,修改 fibonacci 目录下的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.17)
project(fibonacci C) # 指定项目名
set(CMAKE_C_STANDARD 11)
# windows 系统下,编译动态链接库需要导入库。此处为设置导入库
if(WIN32)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 1)
endif (WIN32)
# 将 fibonacci.c 编译为动态链接库
add_library(fibonacci SHARED fibonacci.c)
# 动态链接库和可执行程序不在同一目录下时,可执行程序无法成功引用动态链接库
# install() 可将所有的动态链接库和可执行程序放置为同一目录下,便于程序的成功执行
install(TARGETS fibonacci
RUNTIME DESTINATION bin # Windows 系统下,设置动态链接库的路径为 bin
LIBRARY DESTINATION lib # Linux/Mac 系统下,设置动态链接库的路径为 lib
ARCHIVE DESTINATION lib/static) # 设置静态链接库的地址为 lib/static
4)将主工程目录下的 CMakeLists.txt 修改为:
cmake_minimum_required(VERSION 3.17)
get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId} C)
set(CMAKE_C_STANDARD 11)
# 设置 install 路径,方便后续将动态链接库和可执行程序全部放置一起
set(CMAKE_INSTALL_PREFIX install)
# 设置不同平台下的动态链接库路径(Windows 系统无需其他配置)
if(APPLE)
set(CMAKE_INSTALL_PREFIX @loader_path/../lib) # @loader_path 为可执行程序的路径
elseif(UNIX)
set(CMAKE_INSTALL_PREFIX \$ORIGIN/../lib) # \$ORIGIN 为可执行程序的路径
endif ()
# 添加相应的子工程,添加之后,会自动寻找子工程下的 CMakeLists.txt 文件,将子工程编译成设定好的链接库
add_subdirectory(factorial)
add_subdirectory(fibonacci)
include_directories("include")
file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.c")
foreach(file ${files})
get_filename_component(name ${file} NAME)
add_executable(${name} ${file})
target_link_libraries(${name} factorial fibonacci) # 添加相应的链接库的名称(静态链接库和动态链接库都需要添加)
install(TARGETS ${name} RUNTIME DESTINATION bin) # 将可执行程序放置到 install/bin 目录下
endforeach()
5)此时,若直接运行 04.library_with_cmake.c,程序执行结果会出错,如下图。原因在于执行程序的位置出错,此时执行程序的位置为 Chapter13\cmake-build-debug\04.library_with_cmake.c.exe,该目录下并没有 factorial 子工程的静态链接库 factorial.lib,也没有 fibonacci 子工程下的动态链接库 fibonacci.dll 和导入库 fibonacci.lib。
6)由于在 CMakeLists.txt 中使用 install() 将执行程序及链接库全部放置到 install 目录下,所以在运行程序前,需要先进行 install 的工作。从图中可以看出,执行程序及 fibonacci.dll 全部放入了 install/bin 目录下,静态链接库无显示,因为静态链接库与可执行程序一同编译了,导入库 fibonacci.lib 放入了 install/lib/static 目录下。
7)在命令行运行 install/bin 目录下的 04.library_with_cmake.c.exe,程序结果为:
在正常生产过程中,很少使用命令行编译和运行静态链接库和动态链接库,而是使用 CMake 完成静态链接库和动态链接库的编译。 以 04.library_with_cmake.c 为例,将子工程 fibonacci 编译为动态链接库,子工程 factorial 编译为静态链接库。 04.library_with_cmake.c 的内容为:#include <stdio.h>#include "factorial/factorial.h"#include ...
DCPU-16工具链
这是为DCPU-16虚拟CPU汇编,链接和编译代码的一组工具。 由于最初使用该CPU的游戏早在2013年就被取消,因此不久之后这个项目就落幕了。 提供此存储库是为了历史和教育目的。
不再维护此项目。
Windows使用说明
重要说明: GnuWin32不再起作用,因为它太过时了,无法支持预处理器系统中使用的可重入词法分析器和解析器。 如果使用了旧的说明,则现在必须卸载GnuWin32版本,从PATH中删除GnuWin32,然后按照以下说明进行操作。
您需要安装Cygwin。 您可以通过以下链接下载Cygwin:
确保在安装过程中选择安装期间的Flex和Bison软件包。 不要在Cygwin下安装CMake。 您应该将Cygwin安装到没有空格的路径中(它将通知您执行此操作)。
安装完成后,您必须将Cygwin bin /文件夹(位于安装Cygwin的位置
将第一项取消,第二项选上,点击 OK。
而后点击下一步,点击结束。
新工程完成后,随便新建一个语法正确的初始 .c 文件,然后 command+b “Build All”,根目录下出现Binaries目录,大功告成!
您可能感兴趣的文章:C++获取本机MAC,IP,MASK地址的方法如何利用Emacs来调试C++程序C++获得本机所有网卡的IP和MAC地址信息的实现方法详解C++的JSON静态链接库Js
应该仅通过在代码中包含所需的文件来使用该库,如下所示:
# include " memory.h "
有一些警告,某些标头可能需要系统特定的库或依赖项(对此我无能为力),这是每个标头的要求列表:
内存在Windows上: Kernel32.lib
文件在Windows上: Kernel32.lib (因为它使用memory.h )
确保在编译代码时链接这些库,您可以使用CMake轻松完成此操作:
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows" )
target_link_libraries (your_exe Kernel32.lib)
endif ()
构建示例和测试
要构建提供的示例和测试,只需使用CMake!
mkdir build && cmake ../
1,3rdParty_VS2017_v141_x64_V11_full.7z;
2,cmake-3.12.0-rc1-win64-x64.zip;
3,ffmpeg-4.0-win64-dev.zip;
4,OpenSceneGraph-Data-3.4.0.zip;
5,OpenSceneGraph-OpenSceneGraph-3.6.3.zip;
6,编译完成的release版本。
要是没有C币,也可以去博客里下载!能理解找资源的痛苦,里面有百度链接
https://blog.csdn.net/q1015231295/article/details/106790529
我在学习OpenGL时收集的程序的简单回购。 到目前为止,所有程序都来自 。
您将需要一个至少支持C ++ 17的现代C ++编译器,还需要库和CMake的副本,其他所有内容都应包括在内。
为构建创建一个文件夹并在其中使用CMake,确保链接到它抱怨的所有库,特别是GLFW,这是项目的主要依赖项。
编译器的使用方法因编译器而异。
这是一个Linux示例:
cd opengl-study/
mkdir build
cd build/
cmake ../
完成后,每个编译的程序都应位于其自己的文件夹中。 类似于Shaders程序,该程序在构建后将位于名称为Shaders build/src/shader/ 。
分叉( )
创建功能分支(git checkout -b功能)
提交更改(git commit -am
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
#指定C语言的标准
set(CMAKE_C_STANDARD 99)
set(CMA
# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
以上两句必须在add_executable前面
项目组织:开源项目内一般会存在多个不同的构建目标,类型有:可执行文件、动态库、静态库,这些项目各有自己的独立源文件目录
根目录下有一个 CMakeList.txt,里面定义了cmake版本需求、项目名、c++标准需求等,包含的构建目标公共部分都可以放在此处。
脚本示例:
CMAKE_MINIMUM_REQUIRED(VERSION 3.15...
【规范+工具链】初始化,单元测试,示例编写,持续集成(CI自动化,拉代码后,可以全脚本化,不需要手动安装任何组件),增量编译,交叉编译,
clang-tidy【lint工具+ vscode插件】已完成
CodeChecker ...
xmake用于交叉编译
cmake深耕
感谢: :
命令组合: ldd <xx>查看链接关系
,一大波可用的cmake工具链
git clone https://github.com/fallending/BinartLibs-Cpp.git
cd BinartLibs-Cpp
mkdir build // out-of-source 编译
cd build
cmake ..
cmake --build .
使用指南
# include " /path/to/BitBuffer.h "
macro(use_cxx11)
if (CMAKE_VERSION VERSION_LESS "3.1")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
endif ()
else ()
set (CM
首先,需要确保你的项目代码已经编写完成并且已经生成了动态链接库(也称为共享库或 DLL 文件)。然后,你可以按照以下步骤使用 CMake:
1. 在 CMakeLists.txt 文件中添加以下指令来定义你的库文件:
add_library(mylib SHARED mylib.cpp)
其中,mylib 是你的库文件的名字,SHARED 表示生成动态链接库。
2. 在你的项目中,通过 find_library 指令来查找该库文件。比如:
find_library(MYLIB mylib PATHS /path/to/mylib/directory)
其中,MYLIB 是你自定义的变量名,mylib 是库文件名,PATHS 指定库文件的路径。
3. 将找到的库文件链接到你的可执行文件中:
target_link_libraries(myexe ${MYLIB})
其中,myexe 是你的可执行文件名字。
4. 运行 CMake 生成 Makefile 或其他构建工具的文件。
5. 编译你的项目,此时库文件会被动态链接到你的可执行文件中。
注意:在 Windows 系统上,动态链接库的后缀名为 .dll,在 Linux 和 macOS 系统上,动态链接库的后缀名为 .so。因此在使用 find_library 指令时需要注意不同系统下的后缀名。