我们正在考虑切换到预构建的二进制文件
但我们仍然希望保留返回源代码的可能性
首先您需要一个构建系统,我建议您使用cmake 来处理您的源代码 代码及其依赖项。
让我们在这里进行测试设置,并假设您的工作目录如下所示:
project_folder
|-- lib
| |-- LibA.cpp
| |-- LibA.hpp
|-- tools
| |-- conanfile.py
| |-- conanfile.txt
|-- CMakeLists.txt
|-- main.cpp
它们应该是什么:CMakeLists.txt 是你的 cmake 配置文件,要处理
是否可以识别 Api/abi 中断?
而conanfile.py 是你的配方,意味着你需要打包和创建你的预建库,conanfile.txt 是你的需要文件使用您预先构建的库。
显然,我还建议使用conan 来处理您的预构建库,或者也称为packages。
现在让我们看一下我的示例以及如何使用它:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(my_project LANGUAGES CXX)
add_library(LibA lib/LibA.cpp)
add_executable(ExecutableA main.cpp)
target_link_libraries(ExecutableA LibA)
target_include_directories(LibA PUBLIC ${CMAKE_CURRENT_LIST_DIR}/lib)
在我的示例中我会坚持使用cpp,但对于您的.net 框架,您可以检查this 或this
所以我只是在那个文件中定义了我的targets,并声明了它们之间的依赖关系,内容如下:
main.cpp:
#include <iostream>
#include "LibA.hpp"
int main()
{
printTesting();
std::cout << "Hello World! again" << std::endl;
return 0;
}
LibA.cpp:
#include <iostream>
#include "LibA.hpp"
void printTesting(void)
{
std::cout << "Testing Something" << std::endl;
}
LibA.hpp:
#include <iostream>
void printTesting(void);
我只是假设,您不熟悉 cmake:我们会让 cmake 为我们生成 Makefile,或者为您生成 evtl。 .vcxproj 如果您使用 .net 生成器,但我想在这里保持简单,所以我们将配置项目并构建二进制文件。
mkdir ../build && cd ../build
cmake ../project_folder && make
你会得到你的 LibA 和 ExecutableA ,所以这里还没有什么特别的,只是 cmake 现在照顾你的依赖关系和 evtl。如果发生变化(例如,您的项目中的新 commits),请重新构建它们。
conanfile.py 像这样:
from conans import ConanFile, tools
class LibAConan(ConanFile):
name = "libA"
version = "0.1"
settings = "os", "compiler", "build_type", "arch"
description = "<Description of LibA here>"
url = "None"
license = "None"
author = "None"
topics = None
def package(self):
self.copy("*.a")
def package_info(self):
self.cpp_info.libs = tools.collect_libs(self)
你想:
cp ../project_folder/tools/conanfile.py && conan export-pkg . libA/0.1@myuser/testing
我们的包名是:libA in 0.1 版本。 myuser/testing 是频道,如果您对多个目标平台进行交叉编译,这很有趣。
我们通过调用conan export-pkg创建了可重用包,并缓存在
$HOME_DIR/.conan/data/libA/0.1/myuser/testing(或在您的环境中检查:conan config home)
事件。你想先安装柯南,所以检查这个installation guideline或这个downloads和你的特殊设置:conan with azure devops
所以这些创建的包也可以上传到任何remote_server:
$ conan upload libA/0.1@myuser/testing --all -r=my_remote_server(类比:就像在 git 中提交后的 git push)。
所以我们有 configured、built 和 cmake 和 created 和 uploaded 使用 conan 的包,您的同事可以重用预构建的包/二进制文件通过在 pythonfile.txt 中定义他们的要求:
[requires]
libA/0.1@myuser/testing
[generators]
cmake
他们可以这样做:
mkdir ../build_using_prebuild && cd ../build_using_prebuild && cp ../project_folder/tools/conanfile.txt . && conan install -g deploy . -r my_remote_server
conan 将搜索所需的包和 evlt。从 my_remote_server 下载它
如果他们现在运行cmake ../project_folder && make,将使用那些预构建的包,而不是从头开始编译src。
当然,我建议您在 azure 中自动执行这些步骤,但我想您已经了解了如何使用 构建系统 和 包管理器 来协调您的构建.