没有规则来设定目标'/usr/lib/x86_64-linux-gnu/libboost_filesystem.so'
No rule to make target '/usr/lib/x86_64-linux-gnu/libboost_filesystem.so`
我有一个正在处理的项目,在尝试添加一些提升功能后,我无法让 cmake 工作。我输入
cd build/manual/
cmake ../..
make && make install
我收到以下错误:
taylor@taylor-XPS-13-9365:~/markets/build/manual$ make && make install
Scanning dependencies of target markets
[ 3%] Building CXX object src/markets/CMakeFiles/markets.dir/data_handlers.cpp.o
[ 7%] Building CXX object src/markets/CMakeFiles/markets.dir/data_readers.cpp.o
[ 11%] Building CXX object src/markets/CMakeFiles/markets.dir/execution_handler.cpp.o
[ 14%] Building CXX object src/markets/CMakeFiles/markets.dir/fill.cpp.o
[ 18%] Building CXX object src/markets/CMakeFiles/markets.dir/instrument.cpp.o
[ 22%] Building CXX object src/markets/CMakeFiles/markets.dir/market_bar.cpp.o
[ 25%] Building CXX object src/markets/CMakeFiles/markets.dir/market_snapshot.cpp.o
[ 29%] Building CXX object src/markets/CMakeFiles/markets.dir/order.cpp.o
[ 33%] Building CXX object src/markets/CMakeFiles/markets.dir/pnl_calculator.cpp.o
[ 37%] Building CXX object src/markets/CMakeFiles/markets.dir/portfolio.cpp.o
[ 40%] Building CXX object src/markets/CMakeFiles/markets.dir/position_summary.cpp.o
[ 44%] Linking CXX static library libmarkets.a
[ 44%] Built target markets
Scanning dependencies of target run_backtest
[ 48%] Building CXX object src/CMakeFiles/run_backtest.dir/main.cpp.o
make[2]: *** No rule to make target '/usr/lib/x86_64-linux-gnu/libboost_filesystem.so,', needed by 'src/run_backtest'. Stop.
CMakeFiles/Makefile2:87: recipe for target 'src/CMakeFiles/run_backtest.dir/all' failed
make[1]: *** [src/CMakeFiles/run_backtest.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
此项目有多个CMakeLists.txt
文件,因为有 1.(一个主要的可执行文件markets/src/main.cpp
,2.(一个静态库,以及 3.(markets/test/
中的一些单元测试。
首先,有markets/CMakeLists.txt
:
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 11 ) # used to be 17
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
#set(CMAKE_CXX_COMPILER /usr/bin/g++-8) # this is now set externally!
set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR})
set(MARKETS_INSTALL_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
set(MARKETS_INSTALL_BIN_DIR ${PROJECT_SOURCE_DIR}/bin)
set(MARKETS_INSTALL_LIB_DIR ${PROJECT_SOURCE_DIR}/lib)
set(MARKETS_HEADERS_DIR ${PROJECT_SOURCE_DIR}/src/markets)
include_directories(${MARKETS_INSTALL_INCLUDE_DIR})
include_directories(${MARKETS_HEADERS_DIR})
add_subdirectory(src)
add_subdirectory(test)
然后是markets/src/CMakeLists.txt
(我认为这是有问题的那个(
cmake_minimum_required(VERSION 3.10)
project(run_backtest)
add_subdirectory(markets)
set(SOURCE_FILES main.cpp)
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
find_library(mysqlcppconn 1.1.12 REQUIRED)
find_package(Boost 1.65.1 REQUIRED COMPONENTS system filesystem)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(run_backtest ${SOURCE_FILES})
target_link_libraries(run_backtest markets Eigen3::Eigen mysqlcppconn ${Boost_LIBRARIES})
install(TARGETS run_backtest DESTINATION ${MARKETS_INSTALL_BIN_DIR})
然后是markets/src/markets/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(markets)### C CXX)
set(SOURCE_FILES
data_handlers.h
data_handlers.cpp
data_readers.h
data_readers.cpp
execution_handler.h
execution_handler.cpp
fill.h
fill.cpp
instrument.h
instrument.cpp
market_bar.h
market_bar.cpp
market_snapshot.h
market_snapshot.cpp
order.h
order.cpp
pnl_calculator.h
pnl_calculator.cpp
portfolio.h
portfolio.cpp
position_summary.h
position_summary.cpp
)
#set(Boost_USE_STATIC_LIBS OFF)
#set(Boost_USE_MULTITHREADED ON) # maybe off?
#set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.65.1 REQUIRED COMPONENTS system filesystem)
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
find_library(mysqlcppconn 1.1.12 REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
link_directories( ${Boost_LIBRARY_DIRS})
add_library(markets SHARED STATIC ${SOURCE_FILES})
target_link_libraries(markets Eigen3::Eigen mysqlcppconn, ${Boost_LIBRARIES})
# not sure if i need this
target_link_libraries( markets ${Boost_FILESYSTEM_LIBRARY}, ${Boost_SYSTEM_LIBRARY})
install(TARGETS markets DESTINATION ${MARKETS_INSTALL_LIB_DIR})
我很确定它抱怨的这个文件存在,所以我不确定该怎么办:
taylor@taylor-XPS-13-9365:~$ stat /usr/lib/x86_64-linux-gnu/libboost_filesystem.so
File: /usr/lib/x86_64-linux-gnu/libboost_filesystem.so -> libboost_filesystem.so.1.65.1
Size: 29 Blocks: 0 IO Block: 4096 symbolic link
Device: 10302h/66306d Inode: 17184887 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-09-24 11:11:06.384111528 -0400
Modify: 2018-03-06 05:21:23.000000000 -0500
Change: 2019-09-24 11:10:45.160636771 -0400
Birth: -
您的问题是由文件名 ('/usr/lib/x86_64-linux-gnu/libboost_filesystem.so,'
( 后面的逗号引起的。 您应该删除 CMake 函数调用中分隔参数的逗号(只需在它们之间留一些空格(。
相关文章:
- 没有规则来设定目标'/usr/lib/x86_64-linux-gnu/libboost_filesystem.so'
- Java System.loadLibrary 不会在 /usr/lib/x86_64-linux-gnu/ 文件夹中查
- 如何在 C++ 中修复"/usr/bin/ld: warning: liblber-2.4.so.2, needed by //usr/lib/x86_64-linux-gnu/libcurl-gnu
- OpenCV在Windows和Linux上有不同的结果
- 专有NVIDIA驱动程序的Linux上有多个OpenGLX渲染上下文
- clang,linux是否有一个选项可以在链接时更改共享库名称
- 使用/usr/lib/i386-linux-gnu而不是/usr/lib/x86_64-linux-gnu在CMake中
- ./lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a 的用法是什么
- 如何使用64-Linux上的C 中的新操作员动态分配大型内存,例如10 g
- make[2]: *** 没有规则在 CGAL 中将目标 '/usr/lib/i386-linux-gnu/libmpfr.so'
- ' /usr/lib/i386-linux-gnu/qt5/bin/lrelease: 未找到 警告:目标为空' 尝试从源代码编译 Feathercoin 时出错
- /usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到版本 CXXABI_1.3.8'
- 为什么linux中有多个fcntl.h
- Linux上有符号的16位ALSA PCM数据到U8的转换
- 当我尝试在 Ubuntu bash 中运行我的程序时,出现此错误:" /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21
- 如果我在 Linux 上有 Pthread 代码,那么在 std::thread 中实现相同的代码是否有优势
- 如何修复错误:命令'x86_64-linux-gnu-gcc'失败,退出状态为 1
- Linux gnu++11,在运行时获取"Enable multithreading to use std::thread: Operation not permitted"
- 你能建议文本编辑器(linux),有良好的定制突出显示
- 我在哪里可以找到objbase.h的qextserialenumerator在Linux-gnu/ c++