我正在开发一个C / C ++项目,而我正在使用CMAKE 3.5.2进行构建。但是,现在我必须包含一个使用Octave函数的C ++文件。我可以使用以下命令直接通过line命令编译此源文件:mkoctfile --link-stand-alone new_oct_file -o final_library
。
我正在努力做CMAKE执行此命令。我曾尝试使用add_custom_command
,但它没有用。有人能帮助我吗?
我的CMAKE具有以下结构
cmake_minimum_required(VERSION 2.8)
project(final_library)
add_executable(final_library program.c
./Commons/util.c
./Tools/xulambs_tool.cpp)
find_package(Boost REQUIRED)
include_directories(${Boost_INCLUDE_DIR})
include_directories(/usr/include/octave-4.0.0/octave)
install(TARGETS final-library RUNTIME DESTINATION bin)
add_subdirectory(Commons)
add_subdirectory(Tools)
我尝试添加以下命令(它不起作用):
set(MKOCTFILE "mkoctfile")
set(OCTARG "--link-stand-alone")
add_custom_command(TARGET reordering-library
PRE_LINK
COMMAND ${MKOCTFILE} ARGS ${OCTARG} ./Tools/tool_octave.cpp)
编译输出
[ 4%] Linking CXX executable final-library
g++: error: ./Tools/tool_octave.cpp: No such file or directory
g++: fatal error: no input files
compilation terminated.
CMakeFiles/final-library.dir/build.make:694: recipe for target 'final-library' failed
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/final-library.dir/all' failed
Makefile:127: recipe for target 'all' failed
make[2]: *** [final-library] Error 1
make[1]: *** [CMakeFiles/final-library.dir/all] Error 2
make: *** [all] Error 2
感谢。
答案 0 :(得分:2)
我遇到了和你一样的问题,我通过在CMakeLists.txt文件的target_link_libraries中添加liboctinterp.so来修复它。
我当前的cmake文件包含以下内容:
add_executable(MyEXE main.cc) target_link_libraries(MyEXE liboctave.so liboctinterp.so)
答案 1 :(得分:1)
预链接中的命令可能未在源目录中执行,因此您在脚本中使用的相对路径将无效。尝试使用绝对路径,例如:
add_custom_command(TARGET reordering-library
PRE_LINK
COMMAND ${MKOCTFILE} ARGS ${OCTARG}
"${CMAKE_CURRENT_SOURCE_DIR}/Tools/tool_octave.cpp"
)