Makefile et .Fichier Mak + CodeBlocks et VStudio
Hé les gars, je suis une petite nouvelle à l'ensemble du makefile concept donc j'ai quelques questions concernant.
Je suis entrain de créer un projet à l'aide de CodeBlocks sous linux, j'ai utilisé un outil appelé cbp2mak de créer un .faire fichier en dehors du projet CodeBlocks (si quelqu'un connait un meilleur outil s'il vous plaît laissez-moi savoir).
Maintenant, je ne suis pas sûr quelle est la différence entre les deux .et mak .makefile, quelqu'un pourrait-il me dire? Je peux compiler .mak à l'aide de "make-C .mak" mais quelle est la différence?
La raison im essayant d'utiliser, c'est parce que je veux fournir le code source de mon projet et que vous voulez qu'il soit constructible à la fois linux et windows, donc je ne veux pas de leur donner mon codeblocks fichier de projet. J'ai donc pensé que je pourrais utiliser un makefile qui peut être utilisé pour construire à la fois linux et windows.
Je tiens également à vérifier dans Windows si les deux MinGW et VC++ compilateur existe et la construction de la source avec les deux compilateurs, sous Linux il sera seulement avec GNU GCC.
L' .fichier mak a aussi quelques macros pour déterminer ce que à construire en fonction de si elle est en cours d'exécution sur windows ou linux comme il y a de la plate-forme fichiers.
Donc questions:
-Quelle est la différence entre les deux .et mak .makefile
-Puis-je exécuter une .mak fichier dans windows? dire à l'aide de visual studio?
-Pourrait-il y avoir une meilleure solution pour ce que je fais maintenant? (J'ai utilisé cpb2mak qu'il génère automatiquement un .fichier mak qui permet de gagner beaucoup de temps car je ne sais pas comment faire pour créer des makefiles)
Aussi n'hésitez pas à fournir des conseils ou des conseils à ce sujet.
EDIT:
J'ai maintenant mis en place .fichier mak
Aussi mon projet est une bibliothèque qui je construire à la fois statique et partagé versions de celui-ci. L' .mak fichier a été généré automatiquement mais je hadded la plate-forme de la poignée avec le ifdef et "shell uname" fonction
# project performer-1.0
export PATH := /opt/wx/2.8/bin:$(PATH)
export LD_LIBRARY_PATH := /opt/wx/2.8/lib:$(LD_LIBRARY_PATH)
_WX = /home/gr/projects/gui/codeblocks/wx
_WX.LIB = $(_WX)/lib
_WX.INCLUDE = $(_WX)/include
_CB = /home/gr/projects/gui/codeblocks/cb/src
_CB.INCLUDE = $(_CB)/include
_CB.LIB = $(_CB)/devel
CFLAGS_C = $(filter-out -include "sdk.h",$(CFLAGS))
# -----------------------------------------
# MAKE_DEP = -MMD -MT $@ -MF $(@:.o=.d)
CFLAGS = -Wall
INCLUDES = -I../performer-1.0
LDFLAGS = -s
RCFLAGS =
LDLIBS = $(T_LDLIBS) -lrt -lboost_regex-gcc43-mt -lxerces-c -lstdc++
LINK_exe = gcc -o $@ $^ $(LDFLAGS) $(LDLIBS)
LINK_con = gcc -o $@ $^ $(LDFLAGS) $(LDLIBS)
LINK_dll = gcc -o $@ $^ $(LDFLAGS) $(LDLIBS) -shared
LINK_lib = rm -f $@ && ar rcs $@ $^
COMPILE_c = gcc $(CFLAGS_C) -o $@ -c $< $(MAKEDEP) $(INCLUDES)
COMPILE_cpp = g++ $(CFLAGS) -o $@ -c $< $(MAKEDEP) $(INCLUDES)
COMPILE_rc = windres $(RCFLAGS) -J rc -O coff -i $< -o $@ -I$(dir $<)
%.o : %.c ; $(COMPILE_c)
%.o : %.cpp ; $(COMPILE_cpp)
%.o : %.cxx ; $(COMPILE_cpp)
%.o : %.rc ; $(COMPILE_rc)
.SUFFIXES: .o .d .c .cpp .cxx .rc
all: all.before all.targets all.after
all.before :
-
all.after : $(FIRST_TARGET)
# -----------------------------------------------------------
ifeq "$(shell uname)" "Linux"
# -----------------------------------------------------------
all.targets : Linux_Dynamic_target Linux_Static_target
# -----------------------------------------------------------
else
# -----------------------------------------------------------
all.targets : Windows_Dynamic_target
# -----------------------------------------------------------
endif
# -----------------------------------------------------------
clean :
rm -fv $(clean.OBJ)
rm -fv $(DEP_FILES)
.PHONY: all clean distclean
# -----------------------------------------------------------
ifeq "$(shell uname)" "Linux"
# -----------------------------------------------------------
# -----------------------------------------
# Linux_Dynamic_target
Linux_Dynamic_target.BIN = libs/libperformer-1.so
Linux_Dynamic_target.OBJ = src/analysis/analyzer.o src/analysis/comparer.o src/analysis/paverage.o src/analysis/pfunctor.o src/analysis/pmax.o src/analysis/pmin.o src/config/configfile.o src/data_collection/datacollector.o src/data_collection/linux/linfactory.o src/data_collection/linux/linmemprof.o src/data_collection/linux/lintimer.o src/data_collection/linux/procsmaps.o src/data_collection/linux/procstatus.o src/data_collection/pstructs.o src/data_collection/resultxml.o
DEP_FILES += src/analysis/analyzer.d src/analysis/comparer.d src/analysis/paverage.d src/analysis/pfunctor.d src/analysis/pmax.d src/analysis/pmin.d src/config/configfile.d src/data_collection/datacollector.d src/data_collection/linux/linfactory.d src/data_collection/linux/linmemprof.d src/data_collection/linux/lintimer.d src/data_collection/linux/procsmaps.d src/data_collection/linux/procstatus.d src/data_collection/pstructs.d src/data_collection/resultxml.d
clean.OBJ += $(Linux_Dynamic_target.BIN) $(Linux_Dynamic_target.OBJ)
Linux_Dynamic_target : Linux_Dynamic_target.before $(Linux_Dynamic_target.BIN) Linux_Dynamic_target.after_always
Linux_Dynamic_target : CFLAGS += -Wall -g -Os
Linux_Dynamic_target : INCLUDES +=
Linux_Dynamic_target : RCFLAGS +=
Linux_Dynamic_target : LDFLAGS += $(CREATE_LIB) $(CREATE_DEF)
Linux_Dynamic_target : T_LDLIBS =
ifdef LMAKE
Linux_Dynamic_target : CFLAGS -= -O1 -O2 -g -pipe
endif
Linux_Dynamic_target.before :
Linux_Dynamic_target.after_always : $(Linux_Dynamic_target.BIN)
$(Linux_Dynamic_target.BIN) : $(Linux_Dynamic_target.OBJ)
$(LINK_dll)
# -----------------------------------------
# Linux_Static_target
Linux_Static_target.BIN = libs/libperformer-1.a
Linux_Static_target.OBJ = src/analysis/analyzer.o src/analysis/comparer.o src/analysis/paverage.o src/analysis/pfunctor.o src/analysis/pmax.o src/analysis/pmin.o src/config/configfile.o src/data_collection/datacollector.o src/data_collection/linux/linfactory.o src/data_collection/linux/linmemprof.o src/data_collection/linux/lintimer.o src/data_collection/linux/procsmaps.o src/data_collection/linux/procstatus.o src/data_collection/pstructs.o src/data_collection/resultxml.o
DEP_FILES += src/analysis/analyzer.d src/analysis/comparer.d src/analysis/paverage.d src/analysis/pfunctor.d src/analysis/pmax.d src/analysis/pmin.d src/config/configfile.d src/data_collection/datacollector.d src/data_collection/linux/linfactory.d src/data_collection/linux/linmemprof.d src/data_collection/linux/lintimer.d src/data_collection/linux/procsmaps.d src/data_collection/linux/procstatus.d src/data_collection/pstructs.d src/data_collection/resultxml.d
clean.OBJ += $(Linux_Static_target.BIN) $(Linux_Static_target.OBJ)
Linux_Static_target : Linux_Static_target.before $(Linux_Static_target.BIN) Linux_Static_target.after_always
Linux_Static_target : CFLAGS += -Wall -g -Os
Linux_Static_target : INCLUDES +=
Linux_Static_target : RCFLAGS +=
Linux_Static_target : LDFLAGS += $(CREATE_DEF)
Linux_Static_target : T_LDLIBS =
ifdef LMAKE
Linux_Static_target : CFLAGS -= -O1 -O2 -g -pipe
endif
Linux_Static_target.before :
Linux_Static_target.after_always : $(Linux_Static_target.BIN)
$(Linux_Static_target.BIN) : $(Linux_Static_target.OBJ)
$(LINK_lib)
# -----------------------------------------
# -----------------------------------------------------------
else
# -----------------------------------------------------------
# -----------------------------------------
# Windows_Dynamic_target
Windows_Dynamic_target.BIN = libs/performer-1.so
Windows_Dynamic_target.OBJ = src/analysis/analyzer.o src/analysis/comparer.o src/analysis/paverage.o src/analysis/pfunctor.o src/analysis/pmax.o src/analysis/pmin.o src/config/configfile.o src/data_collection/datacollector.o src/data_collection/pstructs.o src/data_collection/resultxml.o src/data_collection/windows/winfactory.o src/data_collection/windows/wintimer.o
DEP_FILES += src/analysis/analyzer.d src/analysis/comparer.d src/analysis/paverage.d src/analysis/pfunctor.d src/analysis/pmax.d src/analysis/pmin.d src/config/configfile.d src/data_collection/datacollector.d src/data_collection/pstructs.d src/data_collection/resultxml.d src/data_collection/windows/winfactory.d src/data_collection/windows/wintimer.d
clean.OBJ += $(Windows_Dynamic_target.BIN) $(Windows_Dynamic_target.OBJ)
Windows_Dynamic_target : Windows_Dynamic_target.before $(Windows_Dynamic_target.BIN) Windows_Dynamic_target.after_always
Windows_Dynamic_target : CFLAGS += -Wall -g -Os
Windows_Dynamic_target : INCLUDES +=
Windows_Dynamic_target : RCFLAGS +=
Windows_Dynamic_target : LDFLAGS += $(CREATE_LIB) $(CREATE_DEF)
Windows_Dynamic_target : T_LDLIBS =
ifdef LMAKE
Windows_Dynamic_target : CFLAGS -= -O1 -O2 -g -pipe
endif
Windows_Dynamic_target.before :
Windows_Dynamic_target.after_always : $(Windows_Dynamic_target.BIN)
$(Windows_Dynamic_target.BIN) : $(Windows_Dynamic_target.OBJ)
$(LINK_dll)
ifdef MAKE_DEP
-include $(DEP_FILES)
endif
# -----------------------------------------------------------
endif
#
OriginalL'auteur iQ. | 2009-09-17
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas qu'il y a une différence. C'est juste un makefile par un nom différent.
Essayez de modifier votre question et l'affichage du contenu de la .fichier mak et ce sera plus clair pour nous alors
À partir de ce que vous avez posté, qui ressemble à un Makefile, juste un avec un nom différent.
Ainsi, le nmake utilitaire de microsoft va joyeusement l' .mak fichier que j'ai créé? Que faire si la .fichier mak veut aussi compiler avec MinGW ainsi que VC++ le nmake utilitaire de se plaindre? Ou est-il de meilleurs outils?
Quelques makefiles sont spécifiques à certains programmes. par exemple pmake standard et de faire semblent avoir de problèmes de fonctionnement des makefiles qui cible les uns des autres. Quelle est la documentation de cbp2mak de la documentation (le cas échéant) de l'état?
malheureusement, il n'y a pas beaucoup de documentation juste un readme expliquant comment l'utiliser. Il génère simplement une .fichier mak dont je n'ai pas posté au-dessus. Honnêtement, je ne comprends pas plus de lui donc je ne sais pas si il sera exécuté sur windows. Je ne suis pas sûr de tout bon multi-plate-forme de construction du système, Linux est la cible principale, de sorte qu'il serait idéal d'avoir un gnu compatible du système. Qu'en est cmake? le fait de générer un fichier qui peut être écrit sur un GNU make système? Ou le besoin de l'utilisateur d'avoir cmake installé que je tente d'éviter.
OriginalL'auteur Glen
Je crois Glen réponse est incorrecte, mak et mk (faire) les fichiers ne sont pas du tout les mêmes. Ils sont tous deux utilisés dans l'automatisation des builds mais la ressemblance s'arrête là.
fichier mak est un standard de microsoft qui peut être réalisé avec la commande suivante d'une invite de commande visual studio:
nmake fait partie de Visual Studio et le fichier mak de la syntaxe ou de la structure diffère de mk (faire) des fichiers.
Faire ou mk fichiers sont principalement utilisés dans les versions de Linux avec quelques cas de Croix-Plate-forme de soutien (à condition que le Dev est en charge Windows). Pour construire mk fichier dont vous avez besoin soit d'Autotools ou CMake (ces outils sont disponibles à la fois sur Windows et Linux). mk fichiers sera également accompagné d'un script de configuration qui doit être exécuté avant de le faire étape qui n'est pas le cas pour le mak/nmake.
OriginalL'auteur thebunnyrules