如何在 Windows 和 Linux 中构建跨平台 C++ 库
How to build a cross-platform C++ library in Windows and Linux
我是 Linux 用户,也是 C++ 的初学者。我正在开发一个具有以下结构的小型库
- src
- main.cpp
- 生成文件
- 包括
- Inputs.h
- GenerateTabValues.h
- Prototypes.h
- 数据
- TabNodes.csv
- TabWeights.csv
- 输出
- 测试1
- Results.txt
- 测试2
...
在 Linux 中,我通常使用 gcc 编译 C++,当我有多个依赖项时,我使用带有 makefile 的 make。低于当前案例
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 上编译和 运行。
理想情况下,我想保留相同的结构,并可能添加一个包含 linux 和 [=23] 的 build 文件夹=]win 子文件夹,前者具有上述 makefile。但是我不确定如何在 Windows.
上编译它
在Windows中是否有等同于make的东西?我应该将 MSVC 与 MinGW 一起使用吗?关于哪种可能是实现灵活的可移植性和交叉编译的最佳方法的任何帮助或建议?
使用 MSVC 或 MinGW-w64,确保不要混用。
但如果您来自 Linux 世界,您应该坚持使用 MinGW-w64,甚至可以考虑 MSYS2,它会给您 bash shell.
在此处查看我的 cross-platform 库的最小示例:
https://github.com/brechtsanders/ci-test
该项目同时具有 Makefile
(不适用于 MSVC)和跨平台工作的 CMakeLists.txt
(尽管不适用于 MSVC)。
我是 Linux 用户,也是 C++ 的初学者。我正在开发一个具有以下结构的小型库
- src
- main.cpp
- 生成文件
- 包括
- Inputs.h
- GenerateTabValues.h
- Prototypes.h
- 数据
- TabNodes.csv
- TabWeights.csv
- 输出
- 测试1
- Results.txt
- 测试2 ...
- 测试1
在 Linux 中,我通常使用 gcc 编译 C++,当我有多个依赖项时,我使用带有 makefile 的 make。低于当前案例
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 上编译和 运行。
理想情况下,我想保留相同的结构,并可能添加一个包含 linux 和 [=23] 的 build 文件夹=]win 子文件夹,前者具有上述 makefile。但是我不确定如何在 Windows.
上编译它在Windows中是否有等同于make的东西?我应该将 MSVC 与 MinGW 一起使用吗?关于哪种可能是实现灵活的可移植性和交叉编译的最佳方法的任何帮助或建议?
使用 MSVC 或 MinGW-w64,确保不要混用。
但如果您来自 Linux 世界,您应该坚持使用 MinGW-w64,甚至可以考虑 MSYS2,它会给您 bash shell.
在此处查看我的 cross-platform 库的最小示例: https://github.com/brechtsanders/ci-test
该项目同时具有 Makefile
(不适用于 MSVC)和跨平台工作的 CMakeLists.txt
(尽管不适用于 MSVC)。