我在源代码中使用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}
您建议的生成文件的几个问题(在问题中(:
- 不要在 Makefile.am 中使用
=
,因为这会使从外部控制基本标志变得更加困难。请改用+=
。 - 正如您正确注意到的那样,
CFLAGS
用于编译标志。不幸的是,LDFLAGS
也是错误的,因为它用于链接器标志。您应该将标志添加到LIBS
. - 永远不要使用
-lpthread
。请改用-pthread
。另请注意,-pthread
是一个编译标志,也是一个链接时间标志。 - 就个人而言,我喜欢通过配置脚本添加诸如
-Wall
和-Wextra
之类的标志,而不是作为 makefile 本身的一部分。它使控制其使用变得更加容易。
最终结果应如下所示:
CFLAGS += -pthread
LIBS += -lrt