CMake - ошибка при использовании tgmath.h [duplicate]

Функция base reshape работает отлично:

df <- data.frame(
  year   = c(rep(2000, 12), rep(2001, 12)),
  month  = rep(1:12, 2),
  values = rnorm(24)
)
df_wide <- reshape(df, idvar="year", timevar="month", v.names="values", direction="wide", sep="_")
df_wide

Здесь idvar - столбец классов, который разделяет строки, timevar - столбец классов, который должен быть широко представлен, v.names - это столбец, содержащий числовые значения, direction указывает широкий или длинный формат, а необязательный аргумент sep - это разделитель, используемый между именами классов timevar и v.names на выходе data.frame. Если нет idvar, создайте его перед использованием функции reshape():

df$id   <- c(rep("year1", 12), rep("year2", 12))
df_wide <- reshape(df, idvar="id", timevar="month", v.names="values", direction="wide", sep="_")
df_wide

Просто помните, что требуется idvar! Часть timevar и v.names проста. Выход этой функции более предсказуем, чем некоторые другие, поскольку все явно определено.

52
задан RzR 3 August 2011 в 19:16
поделиться

5 ответов

Это зависит от того, что вы хотите:

A) Если вы хотите указать, к каким библиотекам обращаться, вы можете использовать find_library для поиска libs, а затем использовать link_directories и target_link_libraries to.

Конечно, часто стоит написать хороший скрипт find_package , который красиво добавляет «импортированные» библиотеки с add_library (YourLib IMPORTED) с правильными местоположениями, а также предварительные и суффиксы платформы / сборки. Затем вы можете просто ссылаться на «YourLib» и использовать target_link_libraries.

B) Если вы хотите указать конкретные метки-линкера, например. '-mthreads' или '-Wl, - export-all-symbols' с помощью MinGW-GCC, вы можете использовать CMAKE_EXE_LINKER_FLAGS . Есть также два похожих, но недокументированных флага для модулей, общих или статических библиотек:

CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
44
ответ дан dlemstra 22 August 2018 в 16:00
поделиться

Для связывания с библиотеками см. ответ Андре .

Для флагов компоновщика - следующие 4 переменные CMake:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS

можно легко манипулировать для различные конфигурации (debug, release ...) с макросом ucm_add_linker_flags в ucm

3
ответ дан Community 22 August 2018 в 16:00
поделиться

Вы можете указать флаги компоновщика в target_link_libraries .

5
ответ дан Simon 22 August 2018 в 16:00
поделиться

Посмотрите:

CMAKE_EXE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS
19
ответ дан thiagowfx 22 August 2018 в 16:00
поделиться

Если вы хотите добавить флаг в каждую ссылку , например. -fsanitize=address, то я бы не рекомендовал использовать CMAKE_*_LINKER_FLAGS. Даже при их установке все еще не используется флаг при связывании фреймворка на OSX и, возможно, в других ситуациях. Вместо этого используйте link_libraries():

add_compile_options("-fsanitize=address")
link_libraries("-fsanitize=address")

Это работает для всего.

3
ответ дан Timmmm 22 August 2018 в 16:00
поделиться
  • 1
    Требуется ли add_compile_options, если я просто хочу установить флаги компоновщика? – thomastiger 18 August 2017 в 09:25
  • 2
    Нет ............. – Timmmm 20 August 2017 в 19:10
  • 3
    На данный момент это лучший и самый чистый способ сделать это. – Salamandar 5 December 2017 в 11:19
Другие вопросы по тегам:

Похожие вопросы: