Перекомпилируйте библиотеку CMake для каждого основного файла (и рассмотрите #define) - PullRequest
0 голосов
/ 10 марта 2019

Я работаю над библиотекой Websockets для C ++. В моем проекте есть папка библиотеки и папка tests.

Папка tests содержит множество исходных файлов, каждый из которых скомпилирован как отдельный исполняемый файл и считается тестом. Соответствующие списки CMakeLists для него выглядят так:

file(GLOB TEST_SOURCES "src/*.cpp")
foreach(file ${TEST_SOURCES})
  get_filename_component(_F_NAME ${file} NAME_WE)
  add_executable(${_F_NAME} ${file})
  target_link_libraries (${_F_NAME} ${CMAKE_THREAD_LIBS_INIT})
  target_link_libraries(${_F_NAME} tiny_websockets_lib Catch)
  if(WIN32)
    target_link_libraries(${_F_NAME} wsock32 ws2_32)
  endif()
  add_test(NAME ${_F_NAME} COMMAND ${_F_NAME})
endforeach()

В основном для каждого файла cpp в src/ я создаю новый исполняемый файл и связываю с ним свою библиотеку (здесь она называется tiny_websockets_lib).

Библиотека CMakeLists.txt выглядит следующим образом:

file(GLOB_RECURSE tinyws_SOURCES
    "src/*.cpp"
)

file(GLOB_RECURSE tinyws_HEADERS 
    "include/*.h"
    "include/*.hpp"
)

include_directories(include/tiny_websockets)
add_library(tiny_websockets_lib STATIC ${tinyws_HEADERS} ${tinyws_SOURCES})
set_target_properties(tiny_websockets_lib PROPERTIES LINKER_LANGUAGE CXX)
target_include_directories(tiny_websockets_lib PUBLIC include)

Выпуск: В библиотеке у меня есть несколько флагов условной компиляции. Например, этот флаг:

#define _WS_CONFIG_NO_TRUE_RANDOMNESS

может быть определено, и это изменит вид библиотеки.

Проблема в том, что библиотека компилируется только один раз , поэтому, если мой тест выглядит так:


#define _WS_CONFIG_NO_TRUE_RANDOMNESS
#include <library_stuff_with_conditional_compile_ifdefs>

int main() {
  // tests
}

Библиотека больше не будет компилироваться, и флаг не будет учитываться.

TLDR: Насколько я понимаю, библиотека компилируется один раз и связывается несколько раз. Я хотел бы, чтобы библиотека перекомпилировалась и учитывала основной файл для каждого теста.

Вы можете увидеть фактический проект и структуру здесь: https://github.com/gilmaimon/TinyWebsockets

Спасибо.

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