Ah, and I royally typo'd: prog.cpp includes the header via:
#include "mylib/myfunc.h" (not just "myfunc.h") On Tue, Dec 2, 2014 at 11:01 AM, Chris Johnson <[email protected]> wrote: > Background: I'm converting an existing project from a custom build > process which uses BSD Make to CMake. The source for the project is > contained in about 600 directories, and has about a dozen libraries and > maybe a hundred executables. The old build system (make) has to continue > working until the new CMake-based system is fully operational and tested. > For the most part, this has been straight forward and easy, since make is > building in source using in-source Makefiles. I've simply added a > CMakeLists.txt file to each directory, and the actual CMake build occurs > out-of-source. It's only the edge cases (of course!) which have given me a > headache. I've solved some of them. This message is about one I have not > yet been able to solve. > > The basic problem is this: my executables cannot find the header files > for some of the libraries, because they are in a subdirectory when > installed, but are not in a subdirectory while in source. > > Here's a simplified example (SSCCE) which reproduces this problem. > > The file structure: > . > |-- bin/ > |-- include/ > | `-- mylib/ > |-- lib/ > `-- src/ > |-- CMakeLists.txt > |-- mylib/ > | |-- CMakeLists.txt > | |-- myfunc.cpp > | `-- myfunc.h > `-- prog/ > |-- CMakeLists.txt > `-- prog.cpp > > The top-level bin, include and lib directories are the install locations, > exactly parallel to standard Unix locations. Note that file myfunc.h > installs into ./include/mylib. Note also that prog.cpp includes this > header via #include "myfunc.h". > > Here are the current CMakeLists.txt files. > > Top level (../src): > cmake_minimum_required(VERSION 2.8.4) > project(src) > add_subdirectory(mylib) > add_subdirectory(prog) > > mylib: > cmake_minimum_required(VERSION 2.8.4) > project(mylib) > > set(CPP_SOURCE myfunc.cpp) > set(HEADERS myfunc.h) > > add_library(mylib ${CPP_SOURCE} ) > > target_include_directories( > mylib PUBLIC > # Headers used from source/build location: > "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" > # Headers used from the installed location: > "$<INSTALL_INTERFACE:include>" > ) > > install(TARGETS mylib DESTINATION lib) > install(FILES ${HEADERS} DESTINATION include/mylib) > > prog: > cmake_minimum_required(VERSION 2.8.4) > project(prog) > > set(SOURCE_FILES prog.cpp) > > set(LIBS mylib) > > add_executable(prog ${SOURCE_FILES}) > target_link_libraries(prog ${LIBS}) > install(TARGETS prog DESTINATION bin) > > When I build, I get this error: > > src/.build$ make install > -- Configuring done > -- Generating done > -- Build files have been written to: /sandbox/src/.build > Scanning dependencies of target mylib > [ 50%] Building CXX object mylib/CMakeFiles/mylib.dir/myfunc.cpp.o > Linking CXX static library libmylib.a > [ 50%] Built target mylib > Scanning dependencies of target prog > [100%] Building CXX object prog/CMakeFiles/prog.dir/prog.cpp.o > /sandbox/src/prog/prog.cpp:1:10: fatal error: 'mylib/myfunc.h' > file not found > #include "mylib/myfunc.h" > ^ > 1 error generated. > make[2]: *** [prog/CMakeFiles/prog.dir/prog.cpp.o] Error 1 > make[1]: *** [prog/CMakeFiles/prog.dir/all] Error 2 > make: *** [all] Error 2 > > > How can I create CMake rules that will allow me to work around this? > > As I mentioned above, the existing make-based build has to continue > working, so I cannot change the #include statement to remove the > subdirectory path. > > ..chris >
-- 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: http://public.kitware.com/mailman/listinfo/cmake
