[CMake] question about version details in source code
Eric Doenges
doenges at mvtec.com
Wed Jul 17 10:44:16 EDT 2019
Am 17.07.19 um 15:38 schrieb hex:
>
> hello community,
>
> I am receiving a|fatal error: foobar_version.h: No such file or
> directory|for|foobar_version.h|. The reason is that the source file is
> generated in|${CMAKE_CURRENT_BINARY_DIR}/foobar_version.cpp|while the
> header file is in|${CMAKE_CURRENT_SOURCE_DIR}|as seen here:
>
> 1234|configure_file(foobar_version.cpp.in foobar_version.cpp @ONLY) #
> configure_file(foobar_version.h foobar_version.h @ONLY)
> add_library(foobar_version STATIC
> ${CMAKE_CURRENT_BINARY_DIR}/foobar_version.cpp) |//
>
> In the source I simply|#include "foobar_version.h"|but the file is in
> a different location.
>
> Why is this|CMakeLists.txt|file placing the files in different
> locations? What should I do about it?
>
Nothing. You really want to keep source and build directories seperate,
which means you do not want to generate files into the source directory.
Instead, add the CMAKE_CURRENT_SOURCE_DIR to the include search path of
any target that needs to include foobar_version.h using any one of:
1) the include_directories command
2) the target_include_directories command
3) the CMAKE_INCLUDE_CURRENT_DIR variable
> ------------------------------------------------------------------------
>
> also, what is the purpose of|mylib.cpp|, I had to create it otherwise
> I receive:|No SOURCES given to target: fooToolkit|. The build is
> successful but my file is currently empty. Here are all build steps:
>
> 123456789|configure_file(foobar_version.cpp.in foobar_version.cpp
> @ONLY) configure_file(foobar_version.h foobar_version.h @ONLY)
> add_library(foobar_version STATIC
> ${CMAKE_CURRENT_BINARY_DIR}/foobar_version.cpp) add_executable(foobar
> main.cpp) target_link_libraries(foobar PRIVATE foobar_version)
> add_library(fooToolkit mylib.cpp) target_link_libraries(fooToolkit
> PRIVATE foobar_version) |//
> ------------------------------------------------------------------------
I'm not sure what you are trying to accomplish with the fooToolkit
target. If you want to create a library without sources for its
properties (because you have a header-only library, for example), the
correct way is to create an INTERFACE library, like so:
add_library(fooToolkit INTERFACE)
As a final note, I would strongly suggest you read the fine manual when
you get errors from CMake - the documentation is actually pretty good
when used as a reference and would have answered both of your questions.
--
*Dr. Eric Dönges *
Senior Software Engineer
MVTec Software GmbH | Arnulfstr. 205 | 80634 Munich | Germany
doenges at mvtec.com <mailto:doenges at mvtec.com> | Tel: +49 89 457 695-0 |
www.mvtec.com <http://www.mvtec.com>
Sign up <http://www.mvtec.com/newsletter> for our MVTec Newsletter!
Geschäftsführer: Dr. Wolfgang Eckstein, Dr. Olaf Munkelt
Amtsgericht München HRB 114695
MVTec Software GmbH Logo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20190717/086a73eb/attachment-0001.html>
More information about the CMake
mailing list