[CMake] no convenience target for generated files?

Dave Yost Dave at Yost.com
Wed Apr 8 17:21:16 EDT 2015


I’m using add_custom_command to generate a file, “bar.cc”.

It would be convenient if I could say
  make bar.cc
or
  make bar/bar.cc
but neither of these work, and I can’t see a target in the Makefiles that I can use.

There is a way to make bar.cc.o, but not bar.cc

0 Wed 14:15:54 yost DaveBook ~/p/c++/cmake/target-for-generate
241 Z% bundle `findf *`
[ find CMakeLists.txt bar foo.cc -type f ]
#!/usr/bin/env unbundle
# See http://yost.com/computers/bundle/
======== CMakeLists.txt
cmake_minimum_required(VERSION 3.2.1)

project(yost-cmake-example)

add_subdirectory(bar)

add_executable       (foo foo.cc)
target_link_libraries(foo bar)

======== bar/bar.hh
extern char* str1;

======== bar/CMakeLists.txt

add_executable(genBar genBar.cc)

add_custom_command(
  OUTPUT  bar.cc
  COMMAND genBar > bar.cc
  DEPENDS genBar)

add_library               (bar SHARED bar.cc)
target_include_directories(bar PUBLIC .)

======== bar/genBar.cc
#include <iostream>

int main(int argc, char** argv) {
    std::cout
    << "#include \"bar.hh\"\n\n"
       "char         str1array[] = \"Hello!\";\n"
       "char* str1 = str1array;\n";
    return 0;
}

======== foo.cc
#include <iostream>
#include <bar.hh>

int main(int argc, char** argv) {
  std::cout << str1 << std::endl;
  return 0;
}

========
0 Wed 14:15:57 yost DaveBook ~/p/c++/cmake/target-for-generate
242 Z% mkdir build
0 Wed 14:16:02 yost DaveBook ~/p/c++/cmake/target-for-generate
243 Z% cd build
0 Wed 14:16:03 yost DaveBook ~/p/c++/cmake/target-for-generate/build
244 Z% cmake ..
-- The C compiler identification is AppleClang 6.0.0.6000057
-- The CXX compiler identification is AppleClang 6.0.0.6000057
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/yost/p/c++/cmake/target-for-generate/build
0 Wed 14:16:07 yost DaveBook ~/p/c++/cmake/target-for-generate/build
245 Z% make
Scanning dependencies of target genBar
[ 14%] Building CXX object bar/CMakeFiles/genBar.dir/genBar.cc.o
[ 28%] Linking CXX executable genBar
[ 28%] Built target genBar
[ 42%] Generating bar.cc
Scanning dependencies of target bar
[ 57%] Building CXX object bar/CMakeFiles/bar.dir/bar.cc.o
[ 71%] Linking CXX shared library libbar.dylib
[ 71%] Built target bar
Scanning dependencies of target foo
[ 85%] Building CXX object CMakeFiles/foo.dir/foo.cc.o
[100%] Linking CXX executable foo
[100%] Built target foo
0 Wed 14:16:09 yost DaveBook ~/p/c++/cmake/target-for-generate/build
246 Z% rm bar/bar.cc
0 Wed 14:16:15 yost DaveBook ~/p/c++/cmake/target-for-generate/build
247 Z% make bar/bar.cc
make: *** No rule to make target `bar/bar.cc'.  Stop.
2 Wed 14:16:24 yost DaveBook ~/p/c++/cmake/target-for-generate/build
248 Z% make bar.cc
make: *** No rule to make target `bar.cc'.  Stop.
2 Wed 14:16:27 yost DaveBook ~/p/c++/cmake/target-for-generate/build
249 Z% cd bar
0 Wed 14:19:20 yost DaveBook ~/p/c++/cmake/target-for-generate/build/bar
253 Z% make bar.cc
make: *** No rule to make target `bar.cc'.  Stop.
2 Wed 14:19:22 yost DaveBook ~/p/c++/cmake/target-for-generate/build/bar
254 Z% make bar.cc.o
Generating bar.cc
Building CXX object bar/CMakeFiles/bar.dir/bar.cc.o
0 Wed 14:19:25 yost DaveBook ~/p/c++/cmake/target-for-generate/build/bar
255 Z% 


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20150408/4893553c/attachment-0001.html>


More information about the CMake mailing list