On Tue, Nov 7, 2017 at 9:48 AM, Zack Vitoh <[email protected]> wrote:

> Hi, I am new to libmesh, and have installed it to
> $HOME/src/libmesh/build/
>
> I am trying the simplest thing I can think of: copy the source for
> introduction_ex1.C into a 'myexamples' subdirectory of
> $HOME/src/libmesh/build and create a simple, comprehensible makefile to run
> the code.
>
> Do I simply copy and modify the makefile.in from the original example like
> so?
>
> example_name  = introduction_ex1
>
> install_dir   = $HOME/src/libmesh/build/myexamples/introduction/ex1
> data          = introduction_ex1.C run.sh
> sources       = $(data) run.sh
>
> check_SCRIPTS = run.sh
> CLEANFILES    = output.xda output.xdr
>
>
> ##############################################
> # include common example environment
> include $(top_srcdir)/examples/Make.common
>
> PS: I do not understand automake, and so do not understand the 1200 lines
> of the makefile.am in the original example, but I sense that I should not
> try to modify this since it is generated by automake
>



My advice is actually to not try and copy an example when getting started
since, as you have seen, the automake system is difficult to work with.

After "make install" into $LIBMESH_DIR, I'd create your new application in
a different directory (not in the libmesh source tree or installation
directory) and use a human readable Makefile like the one below.

Put your main program in a file called "foo.cc" and then simply run "make".
Let us know if you run into issues...

-- 
John



# This Makefile assumes you have libmesh built and installed in
$LIBMESH_DIR.

# If the user has no environment variable
# called METHOD, he gets optimized mode.
ifeq (x$(METHOD),x)
  METHOD := opt
endif

# installed libmesh location of libmesh-config script
libmesh_config := $(LIBMESH_DIR)/bin/libmesh-config

# Use the libmesh-config script to determine the usual make variables.
# Note: passing $METHOD along to the libmesh-config script handles the
# case where METHOD is not set and the user does
# make METHOD=dbg foo
# since in this case, METHOD is never set in the environment and thus
# never passed to libmesh-config correctly.
libmesh_CXX      := $(shell METHOD=$(METHOD) $(libmesh_config) --cxx)
libmesh_INCLUDE  := $(shell METHOD=$(METHOD) $(libmesh_config) --include)
libmesh_CPPFLAGS := $(shell METHOD=$(METHOD) $(libmesh_config) --cppflags)
libmesh_CXXFLAGS := $(shell METHOD=$(METHOD) $(libmesh_config) --cxxflags)
libmesh_LIBS     := $(shell METHOD=$(METHOD) $(libmesh_config) --libs)

# File management variables.
headers := $(wildcard *.h)
srcs := $(wildcard *.C)
# Note: spaces are treated as literal characters in patsubst commands!
objs := $(patsubst %.C,%-$(METHOD).o,$(srcs))
deps := $(patsubst %.C,%-$(METHOD).d,$(srcs))

mainfile := $(wildcard *.cc)
mainexe := $(patsubst %.cc,%-$(METHOD),$(mainfile))
maindep := $(patsubst %.cc,%.d,$(mainfile))

.PHONY: clean

# Disable make builtin rules for compiling .C files into objects
#
https://stackoverflow.com/questions/4122831/disable-make-builtin-rules-and-variables-from-inside-the-make-file
.SUFFIXES:

# .SECONDARY with no prerequisites causes all targets to be treated as
# secondary (i.e., no target is removed because it is considered
# intermediate).
.SECONDARY:

all: $(mainexe)

# Generate object files.
%-$(METHOD).o: %.C
@echo "Compiling" $<
@$(libmesh_CXX) -MMD -MP -MT $@ $(libmesh_INCLUDE) $(libmesh_CPPFLAGS)
$(libmesh_CXXFLAGS) -c $< -o $@

# How to build executables. If you have a source file called foo.cc,
# type 'make foo' to build an executable from it.
%-$(METHOD): %.cc $(objs)
@echo "Compiling" $<
@$(libmesh_CXX) -MMD -MP -MT $@ -MF $(maindep) $(libmesh_INCLUDE)
$(libmesh_CPPFLAGS) $(libmesh_CXXFLAGS) $< -o $@ $(libmesh_LIBS)
$(libmesh_LDFLAGS) $(EXTERNAL_FLAGS) $(objs)

echo:
@echo "$(srcs)"
@echo "$(objs)"
@echo "$(deps)"
@echo "$(maindeps)"

# File management rules.
clean:
rm -f *~ $(mainexe) $(objs) $(deps) $(maindep)

# Include all the .d files generated by the compiler, but don't error
# if the files don't exist yet.
-include $(deps)
-include $(maindep)
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to