繁体   English   中英

将定义传播到另一个源文件或在targetlink中设置编译器标志

[英]propagate define to another sourcefile or set compiler flag in targetlink

我有以下问题:

作为我们(专有)测试环境的一部分,我们使用C来将开发的C代码映射到simulink / targetlink,以便我们可以将其编译为S函数。 整个内容用visual-c(++)2010编译

在开发代码中,只有通过使用#ifdef设置了特定标志/定义时,才能访问该函数(因为该函数使测试人员可以内部访问某些数据,而这些代码在生产代码中不可访问)。

  • 我尝试通过targetlink选项中的-DFLAGNAME升旗。 这没有帮助。
  • 我在映射代码中使用了#define FLAGNAME ,到目前为止,此方法#define FLAGNAME ,以至于有关未知函数的警告消失了(因此头文件接受了该标志),但是在链接时我仍然收到错误消息,表明他无法解析外部符号

我无法弄清楚如何在不修改开发代码的情况下访问该函数。 下面我尝试举一个例子:

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:\\用户*用户名* \\应用程序数据\\漫游\\ MathWorks公司\\ MATLAB * MATLABVERSION *

是文件mexopts.bat

有一行以set COMPFLAGS=开头(在本例中为第35行),之后可以定义所有编译器set COMPFLAGS=

在那里可以升起所需的标志。

关于StoryTeller在问题中的评论,不可能将定义从一个编译单元传播到另一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM