c - 如何在 makefile.am 中添加 CFLAGS



我在源代码中使用Makefile.am yocto

我的代码正在使用普通Makefile

但是,在与yocto中的Makefile.am集成时,它得到了分段错误。

我在编译时使用 - lpthread。我想知道如何使用 cflags Makefile.am.谁能告诉我我的Makefile.am是否正确?因为我怀疑我的编译。

以下是我Makefile.am

AUTOMAKE_OPTIONS = foreign
CFLAGS = -Wall -Wextra -static -lpthread -lrt
#include_HEADERS = .Iinclude/*
nobase_include_HEADERS = include/fmsHeader.h include/c_typedef.h include/console_comm.h
bin_PROGRAMS = bbmain
bbexample_SOURCES = bbmain.c

我将内容重新修改为以下格式。它有效

希望它可能对某人有所帮助。

AUTOMAKE_OPTIONS = foreign
CC=arm-linux-gnueabihf-gcc
CFLAGS +=-Wall -Wextra
LDFLAGS=-lpthread -lrt
nobase_include_HEADERS = Headers/console_comm.h Headers/c_typedef.h Headers/fmsHeader.h
bin_PROGRAMS=fmsTestApp
test_SOURCES=fmsTestApp.c
bin_PROGRAMS: 
        ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${test_SOURCES}

您建议的生成文件的几个问题(在问题中(:

  1. 不要在 Makefile.am 中使用=,因为这会使从外部控制基本标志变得更加困难。请改用+=
  2. 正如您正确注意到的那样,CFLAGS用于编译标志。不幸的是,LDFLAGS也是错误的,因为它用于链接器标志。您应该将标志添加到LIBS .
  3. 永远不要使用-lpthread。请改用-pthread。另请注意,-pthread 是一个编译标志,也是一个链接时间标志。
  4. 就个人而言,我喜欢通过配置脚本添加诸如 -Wall-Wextra 之类的标志,而不是作为 makefile 本身的一部分。它使控制其使用变得更加容易。

最终结果应如下所示:

CFLAGS += -pthread
LIBS += -lrt

最新更新