CMakeList从一个具有不同设置的类构建两个二进制文件



我正在学习使用CMake。我有a类(a.h)如下。

class A {
public:
using MyArray = std::array<double, 4>;
...
}

注意这里MyArray的大小是4。

我正在使用CMakeList构建一个可执行文件。

...
add_library(mylib
a.h a.cpp)
add_executable(myapp main.cpp)
target_link_libraries(myapp mylib)
...

我的问题是,我怎么能建立两个可执行文件:一个是myapp与MyArray大小固定在4(如上所述);另一个myapp-20与MyArray大小固定在20?

请注意,我曾经考虑使用template在一个二进制文件中具有不同大小的MyArray,但在我的情况下,构建两个单独的可执行文件更可取。

没什么特别的,添加目标并进行不同的配置。

main.cpp:

#include <fmt/core.h>
#include "a.h"
int main() {
fmt::print("Array size: {}n", sizeof(A::MyArray) / sizeof(double));
}

a.h:

#include <array>
class A {
public:
using MyArray = std::array<double, MY_ARRAY_SIZE>;
};

CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)
project(so)
add_executable(myapp-4 a.h main.cpp)
target_compile_definitions(myapp-4 PRIVATE MY_ARRAY_SIZE=4)
target_link_libraries(myapp-4 fmtd)
add_executable(myapp-20 a.h main.cpp)
target_compile_definitions(myapp-20 PRIVATE MY_ARRAY_SIZE=20)
target_link_libraries(myapp-20 fmtd)

最新更新