Minor correction for anyone readers:
`tup.foreach_rule('*.cpp', 'g++ -std=c++11 -c %f -o %o -I
$(NETHACK_ROOT)/', {'$(NETHACK_ROOT)/temp/%B.o',
'$(NETHACK_ROOT)/temp/<objs>'})`
Will put the object files inside the temp folder, but also create a virtual
reference bin (the one with <objs>.
Then from a Tupfile.lua:
`tup.rule('$(NETHACK_ROOT)/temp/<objs>', 'g++ %<objs> -o %o',
'binaries/test.elf')`
To link them all. Positively surprised. This build system keeps amazing me!
Now to find a method of creating unique .o files...
On Wednesday, August 5, 2015 at 9:10:43 PM UTC+2, Bourgond Aries wrote:
>
> >You can do something like this with the Lua parser:
>
> >Tupdefault.lua (at the top of your project):
> >tup.foreach_rule('*.c', 'gcc -c %f -o %o -I$(NETHACK_ROOT)/include',
> {'%B.o', '$(NETHACK_ROOT)/<objs>'})
>
> Interestingly enough, the code your provided put the object files in the
> source directories.
> To rememedy this I had to write the following in Tupdefault.lua:
> tup.foreach_rule('*.cpp', 'g++ -std=c++11 -g -Wall -Wextra -Wfatal-errors
> -c %f -o %o -I$(NETHACK_ROOT)/', {''$(NETHACK_ROOT)/temp/%B.o'})
>
> A question regarding this, btw, is the DSL deprecated in favor of Lua? I
> was namely generating DSL code using bash, then this came along.
> The Lua API seems a lot more versatile. Also, is "NETHACK_ROOT" the root
> folder convention that ought to be used?
>
> >I'd like to see this trivial Makefile.
> SOURCES=$(find -name *.cpp)
> g++ -std=c++11 -g $(SOURCES) -o binaries/test.elf $(INCLUDE)
>
> I didn't generate .o files here, but that'd be a call to a bash script
> looping over them, generating the .o file,
> and ensuring a unique name (by sorting the list of paths first, then
> `sed`ing the / to be _).
>
> for i in ${LIST}; do
> echo $i | sed 's|/|_|g' # GCC invocation follows naturally...
> done
>
> Is there any way of doing this (E.g. prepending paths to the o-files and
> replacing / by underscores)?
>
>
> On Wednesday, August 5, 2015 at 8:10:59 PM UTC+2, [email protected] wrote:
>>
>> On Wed, Aug 5, 2015 at 12:38 PM, Bourgond Aries <[email protected]> wrote:
>>
>>> I have a project with a lot of directories.
>>> I want to just build every .c file and dump the .o files in
>>> $(TOP)/temp/.
>>> Then I'd like to link them into an executable.
>>>
>>
>> You can do something like this with the Lua parser:
>>
>> Tupdefault.lua (at the top of your project):
>> tup.foreach_rule('*.c', 'gcc -c %f -o %o -I$(NETHACK_ROOT)/include',
>> {'%B.o', '$(NETHACK_ROOT)/<objs>'})
>>
>> Tuprules.lua (at the top of your project):
>> NETHACK_ROOT = tup.getcwd()
>>
>> Tupfile.lua (wherever you want to link everything):
>> tup.rule('$(NETHACK_ROOT)/<objs>', 'gcc -o %o %<objs>', 'nethack')
>>
>> So three files in total, each one line.
>>
>>
>>>
>>> This is trivial with make.
>>>
>>
>> I'd like to see this trivial Makefile.
>>
>>
>>> How is this done in tup?
>>> The single-tupfile-per-directory and similar limitations are not
>>> practical and they clutter.
>>> What am I supposed to do? Propagate the .o files up to the parent
>>> directory? What
>>> if the files have the same name?
>>>
>>
>> If the files have the same name, won't you run into trouble putting
>> everything in $(TOP)/temp regardless?
>>
>> -Mike
>>
>
--
--
tup-users mailing list
email: [email protected]
unsubscribe: [email protected]
options: http://groups.google.com/group/tup-users?hl=en
---
You received this message because you are subscribed to the Google Groups
"tup-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.