Мне удалось воспроизвести проблему, возникшую у меня с гораздо большим проектом. Я думаю, что это настолько минимально, насколько я могу это сделать
При наличии ключа явно добавил заголовок в список источников, и его редактирование все равно не вызывает перекомпиляции чего-либо.
~/src/test2/_build£ cat ../CMakeLists.txt
cmake_minimum_required (VERSION 3.14)
set (CMAKE_CXX_STANDARD 11)
# various explicit CXX sets are necessary for this tiny project and don't exist in larger original
project(moduletest CXX)
set (HEADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
add_subdirectory(submod)
add_library(moduletest_static STATIC "$<TARGET_OBJECTS:submod>")
set_target_properties(moduletest_static PROPERTIES LINKER_LANGUAGE CXX)
~/src/test2/_build£ cat ../submod/CMakeLists.txt
include_directories (${HEADER_DIR})
add_library(submod OBJECT compileme.cpp ../includeme.h)
~/src/test2/_build£ cat ../submod/compileme.cpp
#include "includeme.h"
int function()
{
return 5;
}
Сделать вывод следующим образом:
~/src/test2/_build£ touch ../submod/compileme.cpp
~/src/test2/_build£ make
[ 50%] Building CXX object submod/CMakeFiles/submod.dir/compileme.cpp.o
[ 50%] Built target submod
[100%] Linking CXX static library libmoduletest_static.a
[100%] Built target moduletest_static
~/src/test2/_build£ touch ../includeme.h
~/src/test2/_build£ make
[ 50%] Built target submod
[100%] Built target moduletest_static
Если я уберу использование include_directories
и просто #include "../includeme.h"
в моем файле cpp, все будет работать правильно, независимо от моего вызова add_library
. (Но это точно не вариант в моем реальном проекте)
Следует также отметить, что «Сканирование зависимостей целевого подмодуля» - это что-то вроде красной сельди. В моем более крупном проекте я попытался прикоснуться к одному файлу cpp, чтобы это произошло. Другие cpp-файлы, которые должны были скомпилироваться, по-прежнему не выполнялись.
Использование target_include_directories
ничего не исправило, независимо от абсолютных / относительных путей.
Проблема исчезает с cmake -GNinja ..