unity build: tilde in folder name prevents rebuilds when dirty
CMakeLists.txt
project(test)
cmake_minimum_required(VERSION 3.18)
add_subdirectory(foo~)
foo~/CMakeLists.txt
:
add_library(lib STATIC a.c b.c)
set_target_properties(lib PROPERTIES UNITY_BUILD ON)
the initial build succeeds:
tim@moka-mac:~/dev/cmake_reproducer$ ninja -C build/ -j 1 -v -d explain
ninja: Entering directory `build/'
ninja explain: deps for 'foo~/CMakeFiles/lib.dir/Unity/unity_0_c.c.o' are missing
ninja explain: foo~/CMakeFiles/lib.dir/Unity/unity_0_c.c.o is dirty
ninja explain: foo~/liblib.a is dirty
ninja explain: foo~/all is dirty
[1/2] /Applications/Xcode10.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -isysroot /Applications/Xcode10.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -MD -MT 'foo~/CMakeFiles/lib.dir/Unity/unity_0_c.c.o' -MF "foo~/CMakeFiles/lib.dir/Unity/unity_0_c.c.o.d" -o 'foo~/CMakeFiles/lib.dir/Unity/unity_0_c.c.o' -c 'foo~/CMakeFiles/lib.dir/Unity/unity_0_c.c'
[2/2] : && /usr/local/Cellar/cmake/3.18.1/bin/cmake -E rm -f "foo~/liblib.a" && /Applications/Xcode10.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar qc "foo~/liblib.a" 'foo~/CMakeFiles/lib.dir/Unity/unity_0_c.c.o' && /Applications/Xcode10.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib "foo~/liblib.a" && /usr/local/Cellar/cmake/3.18.1/bin/cmake -E touch "foo~/liblib.a" && :
warning: /Applications/Xcode10.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: warning for library: foo~/liblib.a the table of contents is empty (no object file members in the library define global symbols)
however touching or changing the source file does not cause the file to be rebuilt:
tim@moka-mac:~/dev/cmake_reproducer$ touch foo~/a.c
tim@moka-mac:~/dev/cmake_reproducer$ ninja -C build/ -j 1 -v -d explain
ninja: Entering directory `build/'
ninja: no work to do.
tim@moka-mac:~/dev/cmake_reproducer$ echo "int i;" >> foo~/a.c
tim@moka-mac:~/dev/cmake_reproducer$ ninja -C build/ -j 1 -v -d explain
ninja: Entering directory `build/'
ninja: no work to do.