Как собрать объектные файлы (.o) в определенную директорию с помощью CMake? - PullRequest
0 голосов
/ 04 июня 2018

CMake неявно устанавливает каталоги для файлов объектов при компиляции исходных файлов, но я хочу сохранить все эти объектные файлы в определенном каталоге.

Например, в моем коде CMake создает каталоги на основе исходного кодаКаталоги сами по себе такие:

CMakeFiles/OBJ2.dir/src/lib/kernels/XnnKernel.o

Я хочу хранить их в разных местах, но не могу этого сделать.

Я попробовал несколько команд:

set(OBJ "build/CMakeFiles/OBJ1.dir/src/lib/kernels/igemm8_generic.o")
file(COPY ${OBJ} DESTINATION ${SOURCE_PATH}/src/OBJ_FILES)

КакНасколько я понимаю, команда file(COPY) выполняется перед компиляцией.Пожалуйста, поправьте меня, если я ошибаюсь, и дайте мне решение.

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете использовать комбинацию генератора выражений с командой custom .Базовая функциональность основана на возможности CMake создавать объект библиотеки.

структура проекта:

.
├── CMakeLists.txt
└── src
    └── foo.c

образец CMakeLists.txt:

cmake_minimum_required(VERSION 3.11)

project(foo C)

set(SOURCES "src/foo.c")

set(LIBNAME "foo")
set(LIBNAME_OBJ "${LIBNAME}_obj")

add_library(${LIBNAME_OBJ} OBJECT ${SOURCES})

target_include_directories(${LIBNAME_OBJ} PUBLIC "include")
target_compile_options(${LIBNAME_OBJ} PUBLIC "-fPIC")

add_library(${LIBNAME} SHARED $<TARGET_OBJECTS:${LIBNAME_OBJ}>)

set(OBJ_DIR ${CMAKE_CURRENT_BINARY_DIR}/obj_dir)

add_custom_command(TARGET ${LIBNAME}
  POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E make_directory ${OBJ_DIR}
  COMMAND ${CMAKE_COMMAND} -E copy_if_different 
  $<TARGET_OBJECTS:${LIBNAME_OBJ}> ${OBJ_DIR})

Команда file не поддерживает выражения генератора с операциями файловой системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...