Возможно ли прочитать & ldquo; -D & rdquo; варианты из файла? [Дубликат]

Я получил эту ошибку после выполнения mvn eclipse:eclipse Это немного испортило мой файл .classpath.

Если бы изменить строки в .classpath из

<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>

to

<classpathentry kind="src" path="src/main/java" output="target/classes" />
<classpathentry kind="src" path="src/main/resources" excluding="**"  output="target/classes" />
9
задан Beachwalker 11 July 2013 в 09:24
поделиться

2 ответа

Существует возможность предварительно загрузить сценарий для заполнения файла кэша cmake с помощью

cmake -C <initial-cache>

. Исходный кэш - это файл, содержащий переменные, установленные следующим образом, например. для префикса установки:

set(CMAKE_INSTALL_PREFIX "/my/install/prefix" CACHE PATH "")

Затем просто передайте этот файл при заполнении кэша cmake. Легко, но я этого не знал и не нашел хорошего образца. В качестве плюса это независимый от платформы способ вместо написания сценария или пакетного файла.

Я создаю отдельную папку сценариев рядом с источниками из созданной папки с исходными исходными текстами. Мои файлы, содержащие настройки, хранятся там для каждого сборника lib / executable.

Вы можете поместить все настройки в отдельный файл, и в конце дня осталось всего несколько вызовов:

cmake -E make_directory build/somelib
cmake -E chdir build/somelib cmake -C ../../script/cmake/somelib.cmake ../../source/somelib/src
cmake --build build/somelib --target install

Простой, не так ли?

Автоматически генерировать файл initial-cache:

Если вы находитесь в системе * nix, вы можете запустить следующее внутри ваш файл dir:

cmake -N -LA | tail -n+2 | sed -r 's/([A-Za-z_0-9]+):([A-Z]+)=(.*)/set(\1 "\3" CACHE \2 "")/' >cmake-init.txt

В Windows что-то вроде следующего скрипта cmake должно работать:

# list all cache variables
# this should be run in your build dir

set(filename ${CMAKE_ARGV3})
message(STATUS "Writing to ${filename}")
if(NOT filename)
    message(FATAL_ERROR "Must provide an output filename")
    return()
endif()

execute_process(COMMAND "${CMAKE_COMMAND}" "-N" "-LA" OUTPUT_VARIABLE cacheVars)
string(REPLACE "\n" ";" cacheVars ${cacheVars})
file(WRITE ${filename} "")

foreach (variable ${cacheVars})
    string(REGEX REPLACE "([A-Za-z_0-9]+):([A-Z]+)=(.*)$" "set(\\1 \"\\3\" CACHE \\2 \"\")\n" output ${variable})
    if(CMAKE_MATCH_0)
        file(APPEND ${filename} ${output})
    endif()
endforeach()

Сохраните его, например, get_cache_vars.cmake и запустите его например:

cd <your build-dir>
cmake -P path\to\get_cache_vars.cmake <outputfile.txt>
12
ответ дан jdk1.0 25 August 2018 в 14:29
поделиться

Лучший способ воспроизвести это на другой машине - использовать -DSETTING = TRUE / FALSE args.

Если у вас много таких опций, отличных от значения по умолчанию, вы можете создать свой вызов cmake с помощью скрипта.

Пример:

#!/bin/bash
cmake -G "Unix Makefiles \
   -DOPTION1=TRUE
   -DOPTION2=FALSE

Распределите вспомогательный скрипт bash на другой машине.

1
ответ дан JonnyRo 25 August 2018 в 14:29
поделиться
Другие вопросы по тегам:

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