diff --git a/.gitattributes b/.gitattributes
index e90c3102c878624d064149b9a6d82aec9f89945d..d7f4b0b77a374a987e8d055b1a240921e11a920d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,6 +1,5 @@
 .gitattributes export-ignore
 .gitignore export-ignore
-.keepme export-ignore
 
 /.gitlab-ci.yml export-ignore
 /.mailmap export-ignore
diff --git a/Makefile.in b/Makefile.in
index 5e240f7694124fe3ae7af7361f77cb0f94d93f1c..468c4bd3dc38fccaee086497b972aefc55044511 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -437,11 +437,14 @@ LIBPLUGCMXS = $(addsuffix .cmxs, $(addprefix lib/plugins/, $(PLUGINS)))
 plugins.byte: $(LIBPLUGCMO)
 plugins.opt : $(LIBPLUGCMXS)
 
-lib/plugins/%.cmxs:
+lib/plugins:
+	mkdir lib/plugins
+
+lib/plugins/%.cmxs: | lib/plugins
 	$(SHOW) 'Linking  $@'
 	$(HIDE)$(OCAMLOPT) $(OFLAGS) -shared -o $@ $^
 
-lib/plugins/%.cmo:
+lib/plugins/%.cmo: | lib/plugins
 	$(SHOW) 'Linking  $@'
 	$(HIDE)$(OCAMLC) $(BFLAGS) -pack -o $@ $^
 
@@ -496,6 +499,9 @@ $(TOOLSDEP): $(TOOLSGENERATED)
 byte: bin/why3.byte $(TOOLS_BIN:%=bin/%.byte)
 opt:  bin/why3.opt  $(TOOLS_BIN:%=bin/%.opt)
 
+bin:
+	mkdir bin
+
 bin/why3.opt: lib/why3/why3.cmxa src/tools/main.cmx
 bin/why3.byte: lib/why3/why3.cma src/tools/main.cmo
 bin/why3config.opt: lib/why3/why3.cmxa src/tools/why3config.cmx
@@ -1933,11 +1939,11 @@ src/tools/why3extract.cmx src/ide/gmain.cmx: %.cmx: %.ml
 	        echo '$*.cmx : $*.cmi'; \
 	        echo '$*.cmi : $*.cmo') $(TOTARGET)
 
-%.opt:
+bin/%.opt: | bin
 	$(SHOW) 'Linking  $@'
 	$(HIDE)$(OCAMLOPT) $(OFLAGS) -o $@ $(OLINKFLAGS) $^
 
-%.byte:
+bin/%.byte: | bin
 	$(SHOW) 'Linking  $@'
 	$(HIDE)$(OCAMLC) $(BFLAGS) -o $@ $(BLINKFLAGS) $^
 
diff --git a/bin/.keepme b/bin/.keepme
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/lib/plugins/.keepme b/lib/plugins/.keepme
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000