【问题标题】:How to define compiler flags at compile time using CMake?如何使用 CMake 在编译时定义编译器标志?
【发布时间】:2009-12-11 21:48:13
【问题描述】:

add_definitions 添加在执行 cmake(不是 make)时固定的定义。 执行make(不是cmake)时如何定义它们? 定义的值将是自定义命令的输出。

【问题讨论】:

    标签: build-process makefile cmake


    【解决方案1】:

    您可以在这里找到一些有用的技巧:How to run a command at compile time within Makefile generated by CMake?

    【讨论】:

      【解决方案2】:

      这是一个make文件的例子:

      .后缀:.c.o 抄送 = 抄送 包含 = -I/usr/include -I/usr/sys/include # 注释掉一个或另一个,互斥 CFLAGS = -g # 调试信息 #CFLAGS = -O2 #优化代码 LIBS = -L/usr/lib -L/usr/sys/lib -lsome_lib1 -lsome_lib2 # 调试库 #LIBS = -L/usr/lib # 释放 文件 = mysource.o myroutines1.o myroutines2.o 应用程序 = 我的应用程序 .co: $(CC) $(包括) $(CFLAGS) -c $

      注意标志CFLAGS 是如何定义的。注释掉另一个取决于您是在进行调试还是发布构建..

      上面的示例是我的教程中的一个 make 文件,用于构建一个名为 myapp 的可执行文件,它由 mysource.cmyroutines1.cmyroutines2.c 组成。它还展示了 make 如何足够智能地构建可执行文件而无需重新编译。

      注意 makefile 具有 unix/linux 方向,对上面示例中未显示的制表符/空格非常严格!

      希望这会有所帮助, 最好的祝福, 汤姆。

      【讨论】:

      • 不明白为什么这被否决,因为 OP 明确指出“执行 make(而不是 cmake)时如何定义它们?”换句话说,如何在makefile中定义它们,这是我的理解?如果我误解了,请纠正我?
      • 我不是 OP,这有点晚了......但是......我想 OP(像我一样)正在寻找一个 CMake 命令来自动实现这个逻辑生成的 Makefile。手动编辑 Makefile 不是一种选择。
      • @MattB:哦...忘记了这个...有点太晚了!!!我知道有一个 CMake GUI ..它不是一个答案,但更多的是一个方向,看看 CMake GUI 上是否有一个选项可以为你做这件事,看看它会产生什么......
      • 谢谢,汤姆。我通过此处另一个答案(stackoverflow.com/questions/1438535/…)中的链接找到了我的解决方案。我只是想给你写个便条,说明为什么我认为有人可能对你投了反对票。当然,现在我看到您对另一个被否决的答案的评论,所以您已经知道了。哦,好吧...
      【解决方案3】:

      我不确定我是否理解这个问题,但是...

      也许您可以使用额外的宏来提供命令行 C 编译器标志,例如:

      CFLAGS=  <whatever>
      CFLAGS2= #nothing  
      
      .c.o:
          $(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) -c $<
      

      然后当您发出make 命令时,提供"CFLAGS2=xxx" 命令行参数,它会覆盖makefile 中的默认设置。

      更新

      是的,我不明白 OP 的问题。所以请无视。

      【讨论】:

      • @Loadmaster:我在这里做了同样的事情,但因为我不理解 OP 的问题而被否决了 - 他确实说'何时执行 make(不是 cmake)?'...
      • 问题是关于 cmake 的。 CMake在linux平台上生成makefile,所以不能直接修改。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      相关资源
      最近更新 更多