Boost logo

Boost :

Subject: Re: [boost] CMake and Boost Build tests
From: Edward Diener (eldiener_at_[hidden])
Date: 2017-07-27 15:58:34


On 7/27/2017 11:41 AM, Deniz Bahadir via Boost wrote:
> Am 27.07.2017 um 16:45 schrieb paul via Boost:
>> On Wed, 2017-07-26 at 22:48 -0400, Edward Diener via Boost wrote:
>>> On 7/26/2017 3:42 PM, paul via Boost wrote:
>>>>
> [...]
>>>>
>>>> For a compile/link test:
>>>>
>>>> add_library(footest STATIC EXCLUDE_FROM_ALL footest.cpp)
>>>> add_test(NAME footest COMMAND ${CMAKE_COMMAND} --build . --target
>>>> footest
>>>> --
>>>> config $<CONFIGURATION> WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
>>> Why am I adding a library when all I am trying to do is see whether
>>> source file(s) can be compiled to their object files successfully ( the
>>> compile test ) or whether source file(s) can be compiled to their object
>>> files successfully then linked as an executable without linking errors (
>>> the link test ) ?
>>
>> You have to add a target to be built, and then the test will invoke this
>> target. Tests in cmake are just commands that can do anything, and in
>> this
>> case we instruct cmake to build a target. The reason its a library and
>> not an
>> executable is so that a `main` function is not needed.
>>
>> Of course, this will test both compiling and linking together, as
>> there is no
>> separation for this in cmake.
>
> CMake has support for "object-libraries", which are targets that just
> compile source-files into object-files
> I have not tried it but I would think the following would be possible to
> only test compilation without linking:
>
> ```cmake
>
> add_library(OBJECT footest EXCLUDE_FROM_ALL
> footest.cpp
> # ... further source-files can go here ...
> )
> add_test(NAME footest
> COMMAND ${CMAKE_COMMAND} --build . --target footest --config
> $<CONFIGURATION>
> WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
> )

Thanks, that looks reasonable for a compile test.

>
> ```
>
> HTH,
> Deniz


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk