Boost logo

Boost-Build :

Subject: Re: [Boost-build] Copying source file required by target
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2018-07-26 17:19:15


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 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.

> - 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.)

In Christ,
Steven Watanabe


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk