【问题标题】:Conditional statements in makefilemakefile 中的条件语句
【发布时间】:2013-02-06 15:27:16
【问题描述】:

我在 C++ 代码 _2G_MYSQL_ 中定义了一个指令,该指令在定义时包括其他 mysql 文件。 而且我只想在代码中定义了这个标记时才使用特定的库。有没有办法在 Makefile 中做到这一点。

类似的,

ifdef _2G_MYSQL_ LIBS = -lstdc++ -lmysqlclient -lz -lcrypt -lnsl -lssl -lcrypto -ldl -lm -lMst_main -lAMR_Reject_DSP -lFalseReject -lMStream_setting 别的 LIBS = -lm -lMst_main -lAMR_Reject_DSP -lFalseReject -lMStream_setting 结束

这显然不起作用,因为令牌在头文件中,而不是在 makefile 中。有什么建议 ?谢谢 !

【问题讨论】:

  • 为了清楚起见,您希望使用库构建可执行文件,并且希望库的选择依赖于头文件中定义的预处理器宏。对吗?
  • 是的,没错! :-)
  • 必须有办法做到这一点!

标签: makefile conditional


【解决方案1】:

如果您使用gcc(以及常用的文本工具),您可以通过以下方式进行操作:

 SYMBOL=_2G_MYSQL_
 MAINFILE=myfile.c

 CHECK=$(shell gcc -E -dD $(MAINFILE) | grep $(SYMBOL))

 ifeq ($(findstring define $(SYMBOL), $(CHECK)),define $(SYMBOL))
     LIBS=-lstdc++ -lmysqlclient ....
 else
      LIBS=-lm -lMst_main ...
 endif

【讨论】:

  • 这不起作用,但我认为我做错了什么。 MAINFILE 应该是定义符号的头文件吗?
  • 可以是header,也可以是包含header的c文件。检查gcc -E -dD 是否有效;它应该产生所有#defines
  • 是的 gcc -E -dD 工作,但 ifeq 条件永远不会满足。谢谢,我正在努力,这应该可以工作
猜你喜欢
  • 2020-11-11
  • 1970-01-01
  • 2021-06-30
  • 2023-03-07
  • 2011-11-10
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多