首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将定义传播到另一个源文件或设置目标链接中的编译器标志。

将定义传播到另一个源文件或设置目标链接中的编译器标志。
EN

Stack Overflow用户
提问于 2017-02-13 09:42:34
回答 1查看 145关注 0票数 0

我有以下问题:

作为我们(专有的)测试环境的一部分,我们使用C将开发的C代码映射到simulink/ test链接,这样我们就可以将它编译成S函数。整个过程是用visual-c(++)2010编译的。

在开发代码中,只有当使用#ifdef设置了某个标志/定义时才能访问该函数(因为它是一个函数,它允许测试人员对某些数据进行内部访问,而在生产代码中不应该访问这些数据)。

  • 我尝试通过-DFLAGNAME在tried链接选项中升起标志。这没什么用。
  • 我在映射代码中使用了#define FLAGNAME,到目前为止,这有助于消除关于未知函数的警告(因此头文件接受了标志),但是在链接时仍然会出现错误,他无法解析外部符号。

我不知道如何在不修改开发代码的情况下访问该函数。下面我试着举一个例子:

dev.h

代码语言:javascript
复制
#ifdef FLAGNAME
int* access(void);
#endif

dev.c

代码语言:javascript
复制
#include "dev.h"
#ifdef FLAGNAME
int* access(void){
return &data; //data has filescope
}
#endif

customCode.c (目标链接的映射代码)

代码语言:javascript
复制
#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

编辑:我找到了保存编译选项的批处理,并相应地对其进行了修改,这或多或少是问题的解决方案。但问题仍然是,是否有可能将定义传播到另一个源文件,因为这将使解决方案可移植。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-13 11:42:18

在文件夹中:

C:\Users*USERNAME*\AppData\Roaming\MathWorks\MATLAB*MATLABVERSION*

是文件mexopts.bat。

有一个以set COMPFLAGS=开头的行(在我的例子中是第35行),之后可以定义所有编译器标志。

在那里可以升起所需的旗帜。

关于问题中的StoryTellers注释,不可能从一个编译单元传播定义到另一个编译单元。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42200946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档