我正在学习使用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)