Как отключить автоматическое прикрепление .lib, когда я добавляю зависимости с помощью cmake?

Я хочу связать файл «.obj» со своим проектом.

Вот мой код.

set(EXT_LIBS json_reader.obj json_writer.obj)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${EXT_LIBS}) 

Но в результате были связаны следующие файлы.

json_reader.obj.lib
json_writer.obj.lib

".lib" присоединяется автоматически, если это не файл * .lib.

Я хочу следующий результат

json_reader.obj
json_writer.obj

Как связать файлы * .obj с моим проектом?


person Adelin Ionut    schedule 17.06.2019    source источник
comment
Чем этот вопрос отличается от вашего предыдущего ?   -  person Tsyvarev    schedule 17.06.2019


Ответы (1)


Их следует включить, выполнив следующие действия: ADD_EXECUTABLE(myProgram ${OBJS} <other-sources>) или в вашем случае ADD_EXECUTABLE(myProgram ${EXT_LIBS} <other-sources>)

Если вы хотите использовать разные ссылки для debug и release

if(${CMAKE_BUILD_TYPE} == "Debug")
    set(EXT_LIBS json_reader.obj json_writer.obj)
else()
    set(EXT_LIBS json_reader_alt.obj json_writer_alt.obj)
endif()

Вы можете добавить параметр CMAKE_BUILD_TYPE в cmake-gui, добавив запись. введите описание изображения здесь

Файл .LIB - это набор файлов .OBJ, объединенных вместе с индексом. Не должно быть никакой разницы в том, как работает линкер. Согласно ответу

Мне кажется, что только add_library работает с файлами .a и .lib. И TARGET_LINK_LIBRARIES добавляет только системную библиотеку. файлы.

person Tarick Welling    schedule 17.06.2019
comment
Спасибо за ваш ответ. Но в моем случае это не лучшее решение. - person Adelin Ionut; 17.06.2019
comment
Можете ли вы добавить параметры конкретного случая к вашему вопросу о том, почему вы не можете этого сделать, чтобы люди могли дать лучший ответ? - person Tarick Welling; 17.06.2019
comment
Привет, Тарик, я хочу добавить разные файлы .obj, когда тип сборки - режим отладки и режим выпуска. Вы можете сообщить мне, как это сделать? - person Adelin Ionut; 17.06.2019
comment
Спасибо за ваш ответ. Но когда я настраиваю проект с помощью cmake-gui.exe, $ {CMAKE_BUILD_TYPE} - пустое значение. Таким образом, он всегда компилирует регистр else (). Как я могу решить эту проблему в CMakelist.txt? - person Adelin Ionut; 17.06.2019
comment
Еще раз спасибо. Если я установлю значение Debug вручную, он всегда будет компилировать первый случай. Тогда как я могу определить, является ли Visual Studio build_type отладкой или выпуском в CMakelist.txt? - person Adelin Ionut; 17.06.2019