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

标签 c linker simulink visual-c++-2010

我有以下问题:

作为我们(专有)测试环境的一部分,我们使用 C 将开发的 C 代码映射到 simulink/targetlink,以便我们可以将其编译为 S-Function。整个东西是用Visual-C(++)2010编译的

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

  • 我尝试在目标链接选项中通过 -DFLAGNAME 升起标志。这没有帮助。
  • 我在映射代码中使用了#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:错误 LNK2019:函数 main 中引用的外部符号访问无法解析

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

最佳答案

在文件夹中:

C:\Users*用户名*\AppData\Roaming\MathWorks\MATLAB*MATLABVERSION*

是文件mexopts.bat

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

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

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

关于c - 将定义传播到另一个源文件或在目标链接中设置编译器标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42200946/

相关文章:

c++ - popen 挂起并导致 CPU 使用率达到 100

c - 当 SHARED lib 引用它们时,为什么最终二进制文件中包含 STATIC lib 中未使用的对象?

python - 创建一个 python 脚本来模拟 Matlab 文件并存储结果

plot - 如何在 Simulink 中针对 X 绘制数组 Y?

在 C 中将输入字符串与具有整数变量的字符串进行比较?

我可以使用字符串作为宏来在 C 中传递该宏的值吗?

将 char 数组的值复制到二维数组

c++ - 使用新的 lib 文件更新可执行文件而无需重新编译

c++ - 链接 C++ 文件

matlab - 在 Simulink 中使用符号变量