我有三个文件:cmake的创建共享对象
lib.c lib.h =>他们应该建成一个.so文件
client.c =>这应该被构建为一个可执行文件。
的client.c我包括lib.h文件,以获得下lib.c定义的函数的声明里面
有人能告诉我,我应该使用,使源区的确切CMakeLists文件与Cmake的临时文件和二进制文件和库(在我相信windows的情况下的.dll)在独立的构建和二进制目录中生成的整洁?
我有三个文件:cmake的创建共享对象
lib.c lib.h =>他们应该建成一个.so文件
client.c =>这应该被构建为一个可执行文件。
的client.c我包括lib.h文件,以获得下lib.c定义的函数的声明里面
有人能告诉我,我应该使用,使源区的确切CMakeLists文件与Cmake的临时文件和二进制文件和库(在我相信windows的情况下的.dll)在独立的构建和二进制目录中生成的整洁?
cmake的建立在默认情况下,单独的生成目录(我没有测试这个例子):
PROJECT(myproject)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
SET(mylibSRCS lib.c)
SET(myprogSRCS client.c)
ADD_LIBRARY(mylib ${mylibSRCS})
ADD_EXECUTABLE(myprog ${myprogSRCS})
TARGET_LINK_LIBRARIES(myprog mylib)
你这样做:
mkdir build
cd build
cmake ..
make
一切都将是下建造。
此解决方案不会创建.so
文件,而是与cmake进一步包含的cmake等效文件。
我与寻找解决的办法将提供相同的:
g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o
这将产生可以动态使用dlopen在运行时加载的plugin_lib.so
。
的解决方案缺少像这样的“共享”选项:
ADD_LIBRARY(mylib SHARED ${mylibSRCS})
接受的答案应该更新 –
有没有办法在新目录中始终做到建立一个没有执行这些shell命令?我google搜索,但无法找到任何有用的链接。 –
http://stackoverflow.com/questions/11143062/getting-cmake-to-build-out-of-source-without-wrapping-scripts/11144109#11144109 – Fraser
是的。你可以'mkdir建立&cd建立&cmake ..&make'。如果您需要超级清理存储库,只需删除构建目录即可。这将生成的东西从原始来源中分离出来。 – Stewart