Я пытаюсь создать простой проект CMake, но у меня проблемы с пониманием CMake или, по крайней мере, с ошибкой, которую я получаю.
Созданный мной проект разделен на пару каталогов. У основного есть такой cmake:
cmake_minimum_required(VERSION 3.7.2)
project(Raytracer)
set(CMAKE_CXX_STANDARD 14)
add_subdirectory(src)
set(COMMON_INCLUDES ${PROJECT_SOURCE_DIR}/inc)
Оттуда мой проект разбивается на 2 папки src и inc. и в src у меня есть следующий cmake с идеей глобальных всех подпапок:
FILE(GLOB sub-dirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *)
FOREACH(dir ${sub-dirs})
IF(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${dir})
ADD_SUBDIRECTORY(${dir})
ENDIF()
ENDFOREACH()
add_executable(raytracer main.cpp)
Я также добавляю туда исполняемый файл, который находится в этой основной папке src. С этого момента я хочу иметь возможность добавлять подпапки с их собственными файлами Cmake и связывать эти файлы с моим исполняемым файлом. У меня есть следующий cmake:
set(OBJECTS
asdf.cpp
)
add_library(obj_files ${OBJECTS} ${COMMON_FILES})
target_link_libraries(raytracer obj_files)
но когда я пытаюсь построить, я получаю следующую ошибку:
Cannot specify link libraries for target "raytracer" which is not built by this project.





В основном в файле Cmake или toolchain.cmake порядок команд важен!
target_link_libraries() или target_include_directories() всегда должны быть after add_executable()
Вы должны создать цель (
raytracerв вашем случае) перед использованием вtarget_link_librariesи другие команды, которые ожидают цели.