打印

关于生成输出文件和宏定义的一些问题

[复制链接]
2456|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2016-11-2 12:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 djz1992 于 2016-11-2 13:19 编辑

1.代码写的差不多了,应该输出什么文件供生产部量产烧写?用什么烧写软件和烧写器?
2.不同型号的产品需要不一样的代码,怎么输出一个文件就可以适配多个产品,可以在烧写的时候编译不同区域的代码?@dirtwillfly @xyz549040622

宏定义怎么实现三段代码的选择?
可以通过判断宏定义是否被定义,宏定义的真假,来编译不同的代码,但是貌似都只能两端代码选其一。
#define DEBUG 0
            main()
            {
                #if DEBUG
                    printf("Debugging/n");
                #endif
                    printf("Running/n");
            }

怎么实现三段代码选其一呢?没看到可以判断宏定义的值是多少,来决定编译区域的。
#define DEBUG 1
main()
{
#if (DEBUG==1)//这样可以?
printf("Debugging/n");
#if (DEBUG==2)//这样可以?
printf("Debugging/n");
#endif
printf("Running/n");
}


相关帖子

沙发
dirtwillfly| | 2016-11-2 13:47 | 只看该作者
你用的还是tiva系列吗?

使用特权

评论回复
板凳
djz1992|  楼主 | 2016-11-2 13:52 | 只看该作者
本帖最后由 djz1992 于 2016-11-2 13:53 编辑
dirtwillfly 发表于 2016-11-2 13:47
你用的还是tiva系列吗?

是的啊,这不是快完了么,要生成最终文件了。我有三个版本,能不能用宏定义写选择编译的部分,然后只生成一个输出文件,然后在生产人员烧写的时候,用软件输入一个参数,就可以把文件编译成相应的版本。
STM32是我下一个要用的。。。

使用特权

评论回复
地板
dirtwillfly| | 2016-11-2 19:31 | 只看该作者
djz1992 发表于 2016-11-2 13:52
是的啊,这不是快完了么,要生成最终文件了。我有三个版本,能不能用宏定义写选择编译的部分,然后只生成 ...

嵌套一个ifdef就能实现三个状态了

使用特权

评论回复
5
dalarang| | 2016-11-2 21:14 | 只看该作者
#if (DEBUG==0)
编译的语句1
#elif (DEBUG==1)
编译的语句2
#elif (DEBUG==2)
编译的语句3
#endif

使用特权

评论回复
6
pklong| | 2016-11-2 21:50 | 只看该作者
这个执行逻辑没错误?

使用特权

评论回复
7
xyz549040622| | 2016-11-2 21:50 | 只看该作者
你为什么不这样定义呢?
#define out  "Debugging/n"
直接修改后面的字符就好了。

使用特权

评论回复
8
pklong| | 2016-11-2 21:54 | 只看该作者
以前也就是#ifdef 这个还真没试过。

使用特权

评论回复
9
djz1992|  楼主 | 2016-11-3 08:50 | 只看该作者
dirtwillfly 发表于 2016-11-2 19:31
嵌套一个ifdef就能实现三个状态了

可以了,写好了,这个代码以后要交给别人烧写,修改一下宏定义就可以适配不同的产品。但是我怕其他地方被他们改错了就不好了,有没有什么办法可以把其他地方的代码锁死,不能修改?

使用特权

评论回复
10
djz1992|  楼主 | 2016-11-3 08:50 | 只看该作者
dalarang 发表于 2016-11-2 21:14
#if (DEBUG==0)
编译的语句1
#elif (DEBUG==1)

谢谢啊,可以了

使用特权

评论回复
11
dirtwillfly| | 2016-11-3 09:08 | 只看该作者
djz1992 发表于 2016-11-3 08:50
可以了,写好了,这个代码以后要交给别人烧写,修改一下宏定义就可以适配不同的产品。但是我怕其他地方被 ...

把能生成lib文件的部分都生成lib库,最终只剩下主函数能修改

使用特权

评论回复
12
djz1992|  楼主 | 2016-11-3 10:49 | 只看该作者
dirtwillfly 发表于 2016-11-3 09:08
把能生成lib文件的部分都生成lib库,最终只剩下主函数能修改

呃。。没有只留下几行代码可以修改的方法么

使用特权

评论回复
13
dalarang| | 2016-11-3 11:28 | 只看该作者
djz1992 发表于 2016-11-3 08:50
可以了,写好了,这个代码以后要交给别人烧写,修改一下宏定义就可以适配不同的产品。但是我怕其他地方被 ...

新建一个Config.h作为宏配置文件,其中添加需要的宏定义。
在需要选择性编译的文件头引用该文件即可。

除了Config.h以外其它的.c和.h都设为只读属性,就不会被修改了。

使用特权

评论回复
14
dirtwillfly| | 2016-11-3 13:49 | 只看该作者
djz1992 发表于 2016-11-3 10:49
呃。。没有只留下几行代码可以修改的方法么

没有。只要别人能看到,总有修改的办法

使用特权

评论回复
15
djz1992|  楼主 | 2016-11-3 14:11 | 只看该作者
dalarang 发表于 2016-11-3 11:28
新建一个Config.h作为宏配置文件,其中添加需要的宏定义。
在需要选择性编译的文件头引用该文件即可。

怎么设置成只读啊。。文件右击属性里?

使用特权

评论回复
16
maqianqu| | 2016-11-3 22:40 | 只看该作者
多个#if效果怎么样?

使用特权

评论回复
17
maqianqu| | 2016-11-3 22:43 | 只看该作者
用的什么编译器呢?

使用特权

评论回复
18
djz1992|  楼主 | 2016-11-4 08:41 | 只看该作者
maqianqu 发表于 2016-11-3 22:40
多个#if效果怎么样?

可以啊,每个#if搭配一个#endif

使用特权

评论回复
19
djz1992|  楼主 | 2016-11-4 08:42 | 只看该作者
maqianqu 发表于 2016-11-3 22:43
用的什么编译器呢?

CCS啊

使用特权

评论回复
20
ghuca| | 2016-11-4 22:42 | 只看该作者
这样能实现debug的输出吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝