Makefile intermediate compiler targets only available when sources in top CMakeLists
The auto generated intermediate compilation Makefile targets .s and .i are only present the target sources are added in the top level CMakeLists.txt.
Example:
CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
PROJECT(TEST C CXX)
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n")
ADD_EXECUTABLE(main ${CMAKE_BINARY_DIR}/main.c)
FILE(WRITE ${CMAKE_BINARY_DIR}/mainxx.cxx "int main(void){return 0;}\n")
ADD_EXECUTABLE(mainxx ${CMAKE_BINARY_DIR}/mainxx.cxx)
Results in:
make help
(...)
... main
... mainxx
... main.o
... main.i
... main.s
... mainxx.o
... mainxx.i
... mainxx.s
However doing the FILE / ADD_EXECUTABLE bits in a subdir's CMakeLists.txt
# Top level CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
PROJECT(TEST C CXX)
ADD_SUBDIRECTORY(sub)
# sub/CMakeLists.txt
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n")
ADD_EXECUTABLE(main ${CMAKE_BINARY_DIR}/main.c)
FILE(WRITE ${CMAKE_BINARY_DIR}/mainxx.cxx "int main(void){return 0;}\n")
ADD_EXECUTABLE(mainxx ${CMAKE_BINARY_DIR}/mainxx.cxx)
results in :
make help
(...)
... main
... mainxx