相关疑难解决方法(0)

使用CMake静态链接到项目外的库

我想使用CMake将我的项目链接到我的共享库.该库只在少数项目之间共享,而且相当小,所以我真的想在链接之前构建它.每次构建它似乎比维护最新的预编译版本更好,因为我要与项目一起更改它.它是独立的,因为它包含我在下一个项目中几乎肯定需要的东西.

我如何配置CMake来做呢?

我目前相关项目的CMakeLists.txt如下所示:

find_package( Boost REQUIRED COMPONENTS unit_test_framework)

include_directories(${BaumWelch_SOURCE_DIR}/../../grzesLib/src
                    ${BaumWelch_SOURCE_DIR}/src 
                    ${Boost_INCLUDE_DIRS})

if(CMAKE_COMPILER_IS_GNUCXX)
    add_definitions(-g -std=c++11 -Wall -Werror -Wextra -pedantic -Wuninitialized)
endif()


# Create the unit tests executable
add_executable(
 baumwelchtests stateindextest.cpp baumiterationtest.cpp baumwelchtest.cpp sampleparameters.cpp sdetest.cpp
 # Key includes for setting up Boost.Test
 testrunner.cpp
 # Just for handy reference
 exampletests.cpp
)

# Link the libraries
target_link_libraries( baumwelchtests ${Boost_LIBRARIES} baumwelchlib grzeslib)
Run Code Online (Sandbox Code Playgroud)

但显然编译失败了:

/usr/bin/ld: cannot find -lgrzeslib
Run Code Online (Sandbox Code Playgroud)

c++ dependencies cmake

16
推荐指数
1
解决办法
9695
查看次数

CMake错误:"add_subdirectory没有给出二进制目录"

我正在尝试将Google Test集成到更大项目的子项目中,但我找不到令我满意的解决方案.

我有两个限制: - Google Test的源代码已经在项目结构中的某个位置(因此使用URL从git存储库下载它不是一个选项) - Google Test的源代码不是我子项目的子目录(和永不)

所以,当我尝试做这样的事情时:

add_subdirectory( ${GOOGLETEST_PROJECT_LOCATION})
Run Code Online (Sandbox Code Playgroud)

我收到了:

CMake Error at unit_tests/CMakeLists.txt:10 (add_subdirectory):
  add_subdirectory not given a binary directory but the given source
  directory "${GOOGLETEST_PROJECT_LOCATION}" is not a subdirectory of
  "${UNIT_TEST_DIRECTORY}".  When
  specifying an out-of-tree source a binary directory must be explicitly
  specified.
Run Code Online (Sandbox Code Playgroud)

另一方面,也许ExternalProject_Add可能是一个解决方案,但我不知道如果我不想下载源代码并使用项目中特定位置的源代码,我该如何使用它.

项目结构看起来更像或像这样:

3rdparty 
    |--googletest 
...
subproject
   |--module1
      |--file1.cpp
      |--CMakeLists.txt
   |--module2
      |--file2.cpp
      |--CMakeLists.txt
   |--include
      |--module1
          |--file1.h
      |--module2
          |--file2.h
   |--unit_test
       |--module1
           |--file1test.cpp
       |--module2
           |--file2test.cpp
       |--CMakeLists.txt
   |--CMakeLists.txt
CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

c++ build cmake googletest

6
推荐指数
1
解决办法
6140
查看次数

标签 统计

c++ ×2

cmake ×2

build ×1

dependencies ×1

googletest ×1