我正在为我的游戏添加boost.python库。我编写包装器来在脚本中使用我的类。问题是将该库链接到我的应用程序上。我正在使用cmake构建系统。
现在我有一个简单的应用程序,只有1个文件和相应的Makefile:
PYTHON = /usr/include/python2.7
BOOST_INC = /usr/include
BOOST_LIB = /usr/lib
TARGET = main
$(TARGET).so: $(TARGET).o
g++ -shared -Wl,--export-dynamic \
$(TARGET).o -L$(BOOST_LIB) -lboost_python \
-L/usr/lib/python2.7/config -lpython2.7 \
-o $(TARGET).so
$(TARGET).o: $(TARGET).cpp
g++ -I$(PYTHON) -I$(BOOST_INC) -c -fPIC $(TARGET).cpp
这很有效。它为我构建了一个'so'文件,我可以从Python中导入它。
现在的问题是:如何在cmake中实现这一点?
我在主要的CMakeList.txt
中编写了:
...
find_package(Boost COMPONENTS filesystem system date_time python REQUIRED)
message("Include dirs of boost: " ${Boost_INCLUDE_DIRS} )
message("Libs of boost: " ${Boost_LIBRARIES} )
include_directories(
${Boost_INCLUDE_DIRS}
...
)
target_link_libraries(Themisto
${Boost_LIBRARIES}
...
)
...
message
调用了 show:
Include dirs of boost: /usr/include
Libs of boost: /usr/lib/libboost_filesystem-mt.a/usr/lib/libboost_system-mt.a/usr/lib/libboost_date_time-mt.a/usr/lib/libboost_python-mt.a
好的,所以我为我的项目添加了一个简单的.cpp文件,并包含了<boost/python.hpp>
。编译时出现错误:
/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory
因此它不需要包含所有需要的目录。
第二个问题:
如何组织脚本cpp文件的两步构建? 在我展示的makefile中有TARGET.o和TARGET.so,如何在cmake中处理这2个命令?
据我所了解,最好的方法是创建子项目并在其中执行某些操作。
谢谢。