Re: Copying source file required by target
Mateusz Loskot via Boost-build <[email protected]>
| Newsgroups | gmane.comp.lib.boost.build |
|---|---|
| Message-ID | <CABUeae-pagq9WT9m2F-vJBCfNfOjsPt17GN-4S3mJ-bj-NW80A@mail.gmail.com> |
On 26 July 2018 at 19:19, Steven Watanabe via Boost-build <[email protected]> wrote: > AMDG > > On 07/26/2018 11:08 AM, Mateusz Loskot via Boost-build wrote: >> I'm trying to replicate this CMake'ism for BBv2 >> >> f(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/mwe.cpp) >> configure_file( >> ${CMAKE_CURRENT_SOURCE_DIR}/mwe.cpp.in >> ${CMAKE_CURRENT_SOURCE_DIR}/mwe.cpp >> COPYONLY) >> endif() >> >> I'm trying to achieve that with the make rule and simple actions: >> >> make mwe.cpp : mwe.cpp.in : @copy_mwe_if_not_exists ; >> actions copy_mwe_if_not_exists { cp $(>) $(<) } >> exe mwe : mwe.cpp : ; >> >> Basically, this works, but there is one major issue" >> - it creates source file in bin/mwe.cpp. >> How can I force it to create mwe.cpp in the same directory as mwe.cpp.in? >> >> I've tried to hack it modifying target path using the variables >> expansion, but without luck. > > > Since you want to put the file in a fixed place, > use <location>. I've fiddled with the property but I must be doing something wrong make mwe.cpp : mwe.cpp.in : @copy_mwe_if_not_exists <location>. ; or make mwe.cpp : mwe.cpp.in : <location>. @copy_mwe_if_not_exists ; also trying to use absolute path instead of dot. In all cases mwe.cpp is generated inside bin sub-directory $ b2 ...found 9 targets... ...updating 5 targets... Jamfile</mnt/d/_/workshop/bb_copy_file>.copy_mwe_if_not_exists bin/mwe.cpp gcc.compile.c++ bin/gcc-7.3.0/debug/mwe.o gcc.link bin/gcc-7.3.0/debug/mwe ...updated 5 targets... mloskot@xenial:/mnt/d/_/workshop/bb_copy_file$ tree $ tree -if . ./bin ./bin/config.log ./bin/gcc-7.3.0 ./bin/gcc-7.3.0/debug ./bin/gcc-7.3.0/debug/mwe ./bin/gcc-7.3.0/debug/mwe.o ./bin/mwe.cpp ./bin/project-cache.jam ./jamroot.jam ./mwe.cpp.in ./project-config.jam Where the <location> should go for the desired effect? >> I have also tried to follow the BBv2 generate example based on >> file-target and common.copy action: >> https://github.com/boostorg/build/tree/develop/example/generate >> But constructing a target seems like an overkill for my purpose. >> And, the rule (or common.copy) also creates file in `bin` directory. >> >> >> BTW, I am aware the `copy_mwe_if_not_exists` is incomplete regarding its name: >> - it will have to use cp or copy depending on OS > > common.copy does this already. I'm simply failing to figure out how to use it in the simple actions {} block. Do I need to get back to generate rule approach mentioned earlier, in order to be able to use common.copy? >> - it will have to check if file exists >> > > This is the normal behavior of all targets. > (If you don't want to check whether it's out-of-date, > you can mark the target as NOUPDATE.) Great! Best regards, -- Mateusz Loskot, http://mateusz.loskot.net _______________________________________________ Unsubscribe & other changes: https://lists.boost.org/mailman/listinfo.cgi/boost-build