COMPILE_OPTIONS set on a directory do not end up on the command line
Not working case:
add_subdirectory(src)
set_property(DIRECTORY src APPEND PROPERTY COMPILE_OPTIONS "-Werror")
make VERBOSE=1
does not contain -Werror
Working case:
add_compile_options("-Werror")
add_subdirectory(src)
Attempts at debugging:
get_property(PROP_CF DIRECTORY src PROPERTY COMPILE_OPTIONS)
message("prop cf ${PROP_CF}") # outputs: prop cf -Werror in both cases above
Minimal example:
[redfish@host cmake]$ find . -type f -exec bash -c 'echo ********{}********** && cat {}' \;
********./src/a.cpp**********
int func() { return 0; }
********./src/CMakeLists.txt**********
add_library(liba OBJECT a.cpp)
********./CMakeLists.txt**********
cmake_minimum_required(VERSION 2.8.7)
project(testproj)
# Works: -Werror on command line
#add_compile_options("-Werror")
add_subdirectory(src)
# Does not work: no -Werror on command line
set_property(DIRECTORY src APPEND PROPERTY COMPILE_OPTIONS "-Werror")
[redfish@host cmake]$ mkdir build
[redfish@host cmake]$ cd build
[redfish@host build]$ cmake ..
-- The C compiler identification is GNU 7.1.1
-- The CXX compiler identification is GNU 7.1.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /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: /usr/bin/c++
-- Check for working CXX compiler: /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: /tmp/cmake/build
[redfish@host build]$ make VERBOSE=1
/usr/bin/cmake -H/tmp/cmake -B/tmp/cmake/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /tmp/cmake/build/CMakeFiles /tmp/cmake/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/tmp/cmake/build'
make -f src/CMakeFiles/liba.dir/build.make src/CMakeFiles/liba.dir/depend
make[2]: Entering directory '/tmp/cmake/build'
cd /tmp/cmake/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /tmp/cmake /tmp/cmake/src /tmp/cmake/build /tmp/cmake/build/src /tmp/cmake/build/src/CMakeFiles/liba.dir/DependInfo.cmake --color=
Dependee "/tmp/cmake/build/src/CMakeFiles/liba.dir/DependInfo.cmake" is newer than depender "/tmp/cmake/build/src/CMakeFiles/liba.dir/depend.internal".
Dependee "/tmp/cmake/build/src/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/tmp/cmake/build/src/CMakeFiles/liba.dir/depend.internal".
Scanning dependencies of target liba
make[2]: Leaving directory '/tmp/cmake/build'
make -f src/CMakeFiles/liba.dir/build.make src/CMakeFiles/liba.dir/build
make[2]: Entering directory '/tmp/cmake/build'
[100%] Building CXX object src/CMakeFiles/liba.dir/a.cpp.o
cd /tmp/cmake/build/src && /usr/bin/c++ -o CMakeFiles/liba.dir/a.cpp.o -c /tmp/cmake/src/a.cpp
make[2]: Leaving directory '/tmp/cmake/build'
[100%] Built target liba
make[1]: Leaving directory '/tmp/cmake/build'
/usr/bin/cmake -E cmake_progress_start /tmp/cmake/build/CMakeFiles 0