столкнулся с проблемой, для компилирования программы надо указать gcc флаги -I -L -l. Так вот не получается установить данные флаги в cmake. Подскажите как правильно устанавливать данные флаги?
Проблема больше относиться к tensorflow.
Tensorwlof Install C
Внизу есть пункт о решении проблем с компиляцией. Проверил действительно оно решает данную проблему. Но только через командную строку
gcc -I /opt/tensorflow/include -L /opt/tensorflow/lib tenso.c -l tensorflow
А так как у меня проект, то флаги нужно указать в cmake.
Код из файла CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(tensorflow_example)
set(CMAKE_CXX_STANDARD 11)
include_directories(/opt/tensorflow/include)
link_directories(/opt/tensorflow/lib)
target_link_libraries(tensorflow_example tensorflow)
add_executable(tensorflow_example main.cpp)
Генерирует вот такую ошибку:
/snap/clion/19/bin/cmake/bin/cmake --build /home/lev/CLionProjects/tensorflow/cmake-build-debug --target all -- -j 2 CMake Error at CMakeLists.txt:9 (target_link_libraries): Cannot specify link libraries for target "tensorflow_example" which is not built by this project.
Я не знаю, что эти флаги для gcc означают(почему то смутное сомнение, не флаги ли это линковки, а не компиляции). Я вам отвечу на вопрос об общем подходе добавления флагов компиляции, так как вы об этом спрашиваете.
Давайте добавим наши флаги компиляции в некую константу
SET(MYCOMPILE_FLAGS "-l -L -l")
Теперь мы может поступить одним из следующих способов:
Еще один подход появился с версии Cmake 3.0.2. Можно использовать для этого специальную команду target_compile_options
target_compile_options(${ourtargetname} ${MYCOMPILE_FLAGS})
Первым аргументом(${ourtargetname}) необходимо передать ваше имя сборки(target-а), при компиляции которой будут применены переданные флаги.
Добавить флаги компиляции в предопределенную переменную CMAKE_C_FLAGS(или в CMAKE_CXX_FLAGS, если у вас компиляции с++ исходников), которые содержать дефолтные флаги компиляции соответствующих компиляторов.
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MYCOMPILE_FLAGS }")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MYCOMPILE_FLAGS }")
Или можно добавить новые параметры в переменную через команду LIST(спасибо @Ixsci за дополнение)
LIST(append CMAKE_C_FLAGS ${MYCOMPILE_FLAGS })
LIST(append CMAKE_CXX_FLAGS ${MYCOMPILE_FLAGS })
Добавить флаги компиляции с помощью команды add_definitions.
add_definitions(${MYCOMPILE_FLAGS})
Эта команда предназначена в первую очередь для добавления препроцессорных переменных при компиляции исходников, но передача флагов компиляции для компилятора также должна работать.
Теперь ответ на вопрос(не знаю, если сообщество скажет предыдущий текст удалить, я его удалю)
Чтобы установить дополнительный путь до заголовочных файлов, вы должны воспользоваться командой include_directories
include_directories(/opt/tensorflow/include)
Чтобы добавить дополнительный путь для поиска библиотек линковщику, необходимо воспользоваться командой link_directories
link_directories(/opt/tensorflow/lib)
Чтобы прилинковать библиотеку tensorflow к цели(exe или dll), которая вероятно находиться в папке /opt/tensorflow/lib, нужно вызвать команду target_link_libraries
target_link_libraries(${ourtargetname} tensorflow)
Первым аргументом(${ourtargetname}) необходимо передать ваше имя сборки(target-а)
${ourtargetname}- это название выходного файла, имя сборки. Это имя вы указываете первым параметром либо в команде add_executable(если собираете exe файл), либо в add_library(если собираете библиотеку). В вашем примере вы собираете exe файл, поэтому в CMakeLists ищите функцию add_executable и увидите в ней имя сборки в первом параметре.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости