2015-11-10 12 views
0

Я пишу программу на C с использованием CLion, которая, в свою очередь, использует CMake для своей системы сборки. Пока мне это нравится, я столкнулся с следующей проблемой: я хочу иметь два исполняемых файла, один «нормальный», который должен быть доступен для сборки или отладки или выпуска, а другой - для тестирования. Исполняемый файл будет включать все мои модульные тесты. Для этого я скомпилировал и установил библиотеку ccmocka, которая, похоже, работает достаточно хорошо. Тем не менее, моя главная цель - позволить людям создавать нормальный исполняемый файл с файлом CMakeLists.txt без установки исполняемого файла тестирования. Установка CMocka должна выполняться только в том случае, если они хотят скомпилировать модульные тесты. Я не могу понять, как это сделать, потому что независимо от того, что я делаю, если я хочу, чтобы исполняемый файл для тестирования имел libcmocka, тогда я не могу получить нормальный исполняемый файл без libcmocka.Компиляция тестовых исполняемых файлов с CMake

Ниже представлен мой файл CMakeLists.txt, который работает в том смысле, что он позволяет мне скомпилировать оба исполняемых файла, но он не выполняет описанное выше требование.

cmake_minimum_required(VERSION 3.3) 
project(Crypto_Project) 

include_directories(/usr/local/include) 
find_library(CMOCKA_LIBRARY libcmocka.so.0) 

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -lcmocka") 

#Normal executable 
set(SOURCE_FILES crypto_project.c ap_int.c ap_int.h) 
add_executable(Crypto_Project ${SOURCE_FILES}) 
target_link_libraries(Crypto_Project ${CMOCKA_LIBRARY}) 

#Testing executable 
set(TESTING_SOURCE_FILES ap_int_tests.c ap_int.c ap_int.h) 
add_executable(Test_Crypto_Project ${TESTING_SOURCE_FILES}) 
target_link_libraries(Test_Crypto_Project ${CMOCKA_LIBRARY}) 

Очевидно, чтобы не компилировать с cmocka мне нужно удалить target_link_libraries(Crypto_Project ${CMOCKA_LIBRARY}) от нормального исполняемого файла, а также компиляции без -lcmocka флага, однако, я не могу понять, как получить тестирование компилировать с -lcmocka а нормальный исполняемый файл без него. Если я удалю target_link_libraries(Crypto_Project ${CMOCKA_LIBRARY}) из обычного исполняемого файла, он вызывает следующую ошибку: ~/.CLion12/system/cmake/generated/5c245747/5c245747/Debug/Crypto_Project: error while loading shared libraries: libcmocka.so.0: cannot open shared object file: No such file or directory.

Я отправил на форумы CLion, но пока не получил ответа: https://devnet.jetbrains.com/thread/475277?tstart=0 Я надеялся, что кто-то здесь сможет помочь.

Заранее спасибо.

ответ

1

Изменение этой линии

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -lcmocka") 

этому

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") 

CMake следует добавить -lcmocka флаг автоматически при вызове

target_link_libraries(Test_Crypto_Project ${CMOCKA_LIBRARY}) 
Смежные вопросы