[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