[CMake] Fake dependencies of executables to static libs
Stephan Menzel
stephan.menzel at gmail.com
Thu Apr 4 01:56:20 EDT 2019
Hello again,
no ideas so far? Perhaps I can elaborate. I have tried multiple approaches
over the years. Most recently adding the source files of the lib explicitly
as dependencies to the created executable.
Like this:
set (SRC
MySource1.cpp
MySource2.cpp
)
set (HDR
MySource1.hpp
MySource2.hpp
)
add_library(mylib STATIC ${SRC} ${HDR})
add_executable(myexecutable main.cpp)
target_link_libraries(myexecutable
mylib
)
add_dependencies(myexecutable ${SRC})
This leads to errors though:
CMake Error at CMakeLists.txt:79 (add_dependencies):
The dependency target "MySource1.cpp" of target "myexecutable" does not
exist.
Obviously, I cannot simply state a filename and treat it as a target. I
have however seen something similar been done when it comes to code
generation. I have also seen explicit subtargets for files being created
and then depend on those subtargets. But I don't really know how to do this
the right way.
Alternatively I would also appreciate input about what exactly the problem
with depending on static libs is. The explanations I remember from my last
efforts to tackle this weren't really satisfying. If I understood in more
detail why this isn't possible I may be able to better craft a workaround
on my own.
Really, anything helps. I am losing time and nerve every day because of
this and have been paying this price for so many years that I think it
really is time to come up with a solution.
Cheers,
Stephan
On Tue, Apr 2, 2019 at 5:54 AM Stephan Menzel <stephan.menzel at gmail.com>
wrote:
> Hello List,
>
> In our projects we are using static linkage on Windows (MSVC) and Linux. A
> number of static libs are created and then linked into executables, such as
> unit tests, tools and the actual production artifacts. Very normal stuff.
>
> add_library(mylib STATIC mysources)
> add_excecutable(mytest mytest.cpp)
> target_link_libraries(mytest mylib)
>
> Now although I don't understand the exact reasons behind that, over the
> years came to accept that depedencies between the lib and the resulting
> artifcats are not working. Like, when I change a source file to mylib, the
> lib will get rebuilt but the resulting test tool won't be relinked.
> For test driven development or busy change cycles that can put quite a
> strain on effort, especially on windows. My normal workflow is that I
> always click in mytest.cpp, add and remove a space to mark it dirty as
> quickly as possible and thereby cause the rebuild. But sometimes I forget
> this and this caused me quite a bit of extra work.
> My question is, can I fake that dependency somehow? Perhaps by some hack
> or using some workaround?
>
> What I want to achieve is that when I change the lib, the unit test (or
> any other test tool using it) that depends on it will be relinked, even if
> it has not changed.
>
> Is that possible somehow?
>
> Cheers,
> Stephan
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20190404/cfd85fb3/attachment.html>
More information about the CMake
mailing list