将定义传播到另一个源文件或在目标链接中设置编译器标志
propagate define to another sourcefile or set compiler flag in targetlink
我有以下问题:
作为我们(专有)测试环境的一部分,我们使用 C
将开发的 C 代码映射到 simulink/targetlink,以便我们可以将其编译为 S-Function。全部用visual-c(++)2010
编译
在开发代码中有一个函数,只有在使用#ifdef
设置了某个flag/define时才可以访问(因为它是一个让测试人员内部访问某些数据的函数,这在生产代码中不应该是可访问的。
- 我尝试在目标 link 选项中通过 -DFLAGNAME 提高标志。这没有用。
- 我在我的映射代码中使用了
#define FLAGNAME
,到目前为止,这对未知函数的警告消失了(因此头文件接受了标志),但我仍然在 link-他无法解析外部符号的时间
我想不通如何在不修改开发代码的情况下访问该功能。下面我试着举个例子:
dev.h
#ifdef FLAGNAME
int* access(void);
#endif
dev.c
#include "dev.h"
#ifdef FLAGNAME
int* access(void){
return &data; //data has filescope
}
#endif
customCode.c(targetlink的映射代码)
#define FLAGNAME
#include "dev.h"
int main()
{
int* bar = access();
// do other things
}
我可以访问 dev.c 中的所有其他功能,具体错误是:
customCode.obj : error LNK2019: unresolved external symbol access referenced in function main
编辑:我找到了保存编译选项的批处理并进行了相应的修改,这或多或少是解决问题的方法。
但问题仍然存在,是否可以将定义传播到另一个源文件,因为这将使解决方案可移植。
在文件夹中:
C:\Users*用户名*\AppData\Roaming\MathWorks\MATLAB*MATLABVERSION*
是文件 mexopts.bat
有一行以 set COMPFLAGS=
开头(在我的例子中是第 35 行),之后可以定义所有编译器标志。
在那里可以举起需要的旗帜。
关于 StoryTellers 在问题中的评论,无法将定义从一个编译单元传播到另一个编译单元。
我有以下问题:
作为我们(专有)测试环境的一部分,我们使用 C
将开发的 C 代码映射到 simulink/targetlink,以便我们可以将其编译为 S-Function。全部用visual-c(++)2010
在开发代码中有一个函数,只有在使用#ifdef
设置了某个flag/define时才可以访问(因为它是一个让测试人员内部访问某些数据的函数,这在生产代码中不应该是可访问的。
- 我尝试在目标 link 选项中通过 -DFLAGNAME 提高标志。这没有用。
- 我在我的映射代码中使用了
#define FLAGNAME
,到目前为止,这对未知函数的警告消失了(因此头文件接受了标志),但我仍然在 link-他无法解析外部符号的时间
我想不通如何在不修改开发代码的情况下访问该功能。下面我试着举个例子:
dev.h
#ifdef FLAGNAME
int* access(void);
#endif
dev.c
#include "dev.h"
#ifdef FLAGNAME
int* access(void){
return &data; //data has filescope
}
#endif
customCode.c(targetlink的映射代码)
#define FLAGNAME
#include "dev.h"
int main()
{
int* bar = access();
// do other things
}
我可以访问 dev.c 中的所有其他功能,具体错误是:
customCode.obj : error LNK2019: unresolved external symbol access referenced in function main
编辑:我找到了保存编译选项的批处理并进行了相应的修改,这或多或少是解决问题的方法。 但问题仍然存在,是否可以将定义传播到另一个源文件,因为这将使解决方案可移植。
在文件夹中:
C:\Users*用户名*\AppData\Roaming\MathWorks\MATLAB*MATLABVERSION*
是文件 mexopts.bat
有一行以 set COMPFLAGS=
开头(在我的例子中是第 35 行),之后可以定义所有编译器标志。
在那里可以举起需要的旗帜。
关于 StoryTellers 在问题中的评论,无法将定义从一个编译单元传播到另一个编译单元。