2011-08-26 42 views
0

我有一个VS2008 makefile项目,并希望将某些预处理器定义(#define)(如硬件设置)传递给外部工具。有没有办法将C-PreProcessor定义传递给外部工具作为宏?

有没有简单的方法来做到这一点?除了有一个中间脚本读取信息的.h文件并将它们传递给该工具。

类似:

在.h文件中您有: #define HARDWARE_ADDRESS 0xBEEF

,并呼吁extrnal工具: program_firmware.exe $(的TargetName)HARDWARE_ADDRESS

,而不是: program_firmware。 exe $(TargetName)0xBEEF

+1

你能解决问题吗?创建一个名为$(HardwareAddress)的项目属性并将其设置为0xBEEF,然后在调用cl时定义HARDWARE_ADDRESS = $(HardwareAddress)? –

+0

我无法修改.h文件和#defines,因为它们是由应用程序构建器自动生成的(与编译器构建文件不同,它与Make不同)。但是,如果可以在makefile项目中创建自定义项目属性,我可以使用vs宏来填充它们并从宏中调用外部工具。 – MandoMando

回答

2

您可以将定义移动到makefile:

 
h_address=0xBEEF 
program_firmware.exe $(TargetName) $(h_address) 
CL /DHARDWARE_ADDRESS=$(h_address) TEST.C 

将相同的h_address值传递给program_firmware.exe和C编译器。

+0

查看关于该问题的评论。此外,将program_firmware.exe调用放在每个编译时都会运行它,这不是我们想要的。 – MandoMando

+0

如果你的问题仅限于某些特定的宏,编写一个小程序并不难。这种工具不需要像C预处理器那样复杂。 –

+0

谢谢亚历克斯。那么这将是我试图避免的middlescript。我结束了使用AWK提取值并组装适当的命令行的shell脚本。我猜,Windows PowerShell可以做同样的事情。 – MandoMando

相关问题