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.men...@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 >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake