繁体   English   中英

如何在 Windows 和 Linux 中构建跨平台的 C++ 库

[英]How to build a cross-platform C++ library in Windows and Linux

我是 Linux 用户,也是 C++ 的初学者。 我正在开发一个具有以下结构的小型库

  • 源代码
    • 主文件
    • 生成文件
  • 包括
    • 输入.h
    • 生成TabValues.h
    • 原型.h
  • 数据
    • TabNodes.csv
    • TabWeights.csv
  • 输出
    • 测试1
      • 结果.txt
    • 测试2 ...

在 Linux 中,我通常使用 gcc 编译 C++,当我有多个依赖项时,我使用 make 和 makefile。 在当前案例的下方

CXX = g++

CXXFLAGS = -g -Wall
DLIBS = -lm -lgsl -lgslcblas -lgmp -lquadmath

DEPS = ../../include
TEST1 = ../../output/test1
TEST2 = ../../output/test2
TEST3 = ../../output/test3

vpath %.h $(DEPS)

main: *.cpp $(DEPS)/*.h $(TEST1)/*.h
    g++ $(CXXFLAGS) -I $(DEPS) -I $(TEST1) *.cpp -o main $(DLIBS)

all: test1 test2 test3

test1: *.cpp $(DEPS)/*.h $(TEST1)/*.h
    g++ $(CXXFLAGS) -I $(DEPS) -I $(TEST1) *.cpp -o main $(DLIBS)
    ./main test1

test2: *.cpp $(DEPS)/*.h $(TEST2)/*.h
    g++ $(CXXFLAGS) -I $(DEPS) -I $(TEST2) *.cpp -o main $(DLIBS)
    ./main test2

test3: *.cpp $(DEPS)/*.h $(TEST3)/*.h
    g++ $(CXXFLAGS) -I $(DEPS) -I $(TEST3) *.cpp -o main $(DLIBS)
    ./main test3

clean:
    rm -f main 

我现在必须使我的库跨平台并且能够在 Windows 上编译和运行。

理想情况下,我想保留相同的结构,并可能添加一个包含linuxwin子文件夹的构建文件夹,前者具有上述生成文件。 但是我不确定如何在 Windows 上编译它。

在 Windows 中是否有等效项? 我应该将 MSVC 与 MinGW 一起使用吗? 关于灵活可移植性和交叉编译的最佳方法的任何帮助或建议?

使用 MSVC 或 MinGW-w64,并确保不要混合使用它们。

但如果你来自 Linux 世界,你应该坚持使用 MinGW-w64,甚至可以考虑MSYS2 ,它为你提供了一个 bash shell。

在此处查看我的跨平台库的最小示例: https ://github.com/brechtsanders/ci-test

该项目同时具有跨平台工作的Makefile (不适用于 MSVC)和CMakeLists.txt (虽然不是 MSVC)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM