2017-06-12 1 views
0

J'essaye d'écrire un makefile que je peux utiliser sur linux et mac qui construit avec un aseptiseur d'adresse. Cela fonctionne sur mon exemple errante:Makefile pour Linux et Mac avec assainissement d'adresse

CC   = gcc 
ASAN_FLAGS = -fsanitize=address -fno-omit-frame-pointer -Wno-format-security 
ASAN_LIBS = -static-libasan 
CFLAGS := -Wall -Werror --std=gnu99 -g3 
LDFLAGS += -lpthread 

all: hello 

hello: tiny_queue.o hello.o 
    $(CC) -o [email protected] $(CFLAGS) $(ASAN_FLAGS) $(CURL_CFLAGS) $^ $(LDFLAGS) $(CURL_LIBS) $(ASAN_LIBS) 

Cela fonctionne sur ubuntu/trusty64 mais échoue sur mon mac avec

$ make 
gcc -Wall -Werror --std=gnu99 -g3 -I/opt/X11/include -c -o hello.o hello.c 
gcc -o hello -Wall -Werror --std=gnu99 -g3 -fsanitize=address -fno-omit-frame-pointer -Wno-format-security tiny_queue.o hello.o -lpthread -static-libasan 
clang: error: unknown argument: '-static-libasan' 
make: *** [hello] Error 1 

Est-ce que quelqu'un sait comment écrire un Makefile compatible pour Mac et Linux?

p.s. Je suis très nouveau à C, désolé si cette question est super basique.

+0

Générez du code multithread avec l'indicateur '-pthread' pour le compilateur et l'éditeur de liens. '-lpthread' n'est pas adéquat. –

+0

s'il vous plaît voir [AddressSanitizer] (http://clang.llvm.org/docs/AddressSanitizer.html) –

+0

Ce n'est pas lié au langage C. (Strictement parlant pas même une question makefile). – Olaf

Répondre

1
CC   = gcc 
ASAN_FLAGS = -fsanitize=address -fno-omit-frame-pointer -Wno-format-security 
ASAN_LIBS = -static-libasan 
CFLAGS := -Wall -Werror --std=gnu99 -g3 
LDFLAGS += -lpthread 

all: hello 

hello: tiny_queue.o hello.o 
    $(CC) -o [email protected] $(CFLAGS) $(ASAN_FLAGS) $(CURL_CFLAGS) $^ $(LDFLAGS) $(CURL_LIBS) $(ASAN_LIBS) 

Vous devez pas spécifier une bibliothèque Asan (ou une bibliothèque UBsan, pour cette question). Puisque vous utilisez le pilote du compilateur pour piloter le lien, utilisez simplement -fsanitize=address (c'est la manière recommandée de le faire). Ne pas ajouter -static-libasan. Le pilote du compilateur ajoutera les bibliothèques appropriées pour vous.

+0

Merci, cela a fait l'affaire. J'ai enlevé la section 'ASAN_LIBS' puisque le' -fsanatize = address' était déjà dans le 'ASAN_FLAGS'. – Schneems