如果我有两个项目和一个库。该库需要一个已定义的宏,所以
/* mylib.cpp */
int stack[STACK_SIZE];
在项目 1 中,Stack Size 需要定义为:
/* project_1_main.cpp */
#define STACK_SIZE 50
对于项目 2,堆栈大小需要不同
/* project_2_main.cpp */
#define STACK_SIZE 800
有没有办法用一个未定义的宏构建一个库,然后留给项目去定义?
我正在使用 GCC 编译器,C++03,但不允许我将库转换为模板。
编辑:根据您的输入,我决定不预编译库,使用目录作为包含的源文件,然后添加 -D STACK_SIZE=50 选项以对每个项目进行相应大小的编译。更长的干净构建,但它是干的。
最佳答案
不,这是不可能的。在作为库的一部分的源文件中使用的宏必须在编译库时定义;稍后在另一个源文件中重新定义宏不会改变库的行为。
如果您需要库的行为是可修改的,您很可能需要根据传递给库中函数的值动态分配此数组,例如
int *stack = NULL;
size_t stack_size = 0;
void mylib_init_stack(size_t size) {
if (stack == NULL) {
stack = malloc(size * sizeof(int));
stack_size = size;
} else {
fprintf(stderr, "mylib ERROR: stack already initialized\n");
}
}
并在启动应用程序时调用该函数来初始化库。
关于c++ - 使用未定义的宏构建一个库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29852463/